Tôi có một tập tin gọi là "SimpleFunctions.h" được định nghĩa như sau:Chức năng đã được xác định lỗi trong C++
#ifndef SIMPLEFUNCTIONS_H
#define SIMPLEFUNCTIONS_H
namespace my_namespace {
double round(double r) { return (r > 0.0) ? floor(r + 0.5) : ceil(r - 0.5); }
float round(float r) { return round((double)r); }
}
#endif // SIMPLEFUNCTIONS_H
tập tin này trước đây đã được đưa vào chỉ có một tập tin và nó đã làm việc tốt.
Hôm nay, hôm nay tôi đã đưa nó vào tệp thứ hai và nó không hoạt động nữa. Tại thời gian liên kết, nó cho tôi biết rằng hàm đã được định nghĩa trong "firstfile.obj".
Tuy nhiên, vì tôi đang sử dụng bao gồm bảo vệ, tôi sẽ mong đợi các chức năng được xác định chỉ một lần, hoặc tôi thiếu một cái gì đó?
Bạn chính xác. Đây là lý do tại sao bạn nên tránh thực hiện các chức năng bên trong các tiêu đề. –
'inline' không _not_ ngụ ý liên kết giữa các bên. http://stackoverflow.com/questions/4957582/how-can-i-prove-that-inline-functions-default-to-internal-linkage –
@Charles: lỗi của tôi - Tôi đã chỉnh sửa câu trả lời – pepsi