Tôi có một không gian tên với hàm nội tuyến sẽ được sử dụng nếu một số tệp nguồn. Khi cố gắng liên kết ứng dụng của tôi, hàm nội tuyến được báo cáo dưới dạng các biểu tượng trùng lặp. Có vẻ như mã của tôi đơn giản không phải là nội tuyến các hàm và tôi đã tự hỏi liệu đây có phải là hành vi được mong đợi hay không và cách xử lý tốt nhất.chức năng nội tuyến trong không gian tên tạo ra các biểu tượng trùng lặp trong liên kết trên gcc
tôi sử dụng các tùy chọn gcc sau: -g -Wextra -pedantic -Wmissing-field-initializers -Wredundant-decls -Wfloat-bằng--Wno sắp xếp lại -Wno dài dài Phong cách cùng mã dường như biên dịch và liên kết đúng khi xây dựng trong môi trường VC7.
sau Các mã ví dụ cho thấy cấu trúc của mã:
/* header.h */
namespace myNamespace {
inline bool myFunction() {return true;}
}
/* use_1.cpp */
#include "header.h"
...
bool OK = myNamespace::myFunction();
...
/* use_2.cpp */
#include "header.h"
...
bool OK = myNamespace::myFunction();
...
OK là biến toàn cục trong mỗi tệp cpp? Điều đó sẽ gây ra lỗi biểu tượng trùng lặp. Giả sử rằng nó không phải là toàn cầu, ví dụ của bạn là hợp pháp C++. Thử biên dịch với -Winline. Bạn đang sử dụng phiên bản gcc nào? –
Vui lòng đăng thông điệp trình biên dịch thực tế. Có lỗi xảy ra với các tệp nguồn tối thiểu (chỉ các dòng được đề cập mà không có nội dung được ngụ ý bởi ...) không? –
Khi tôi thay đổi một trong các tên của 'OK' thành' OK1', thêm một hàm 'main' trống và loại bỏ' ... '; biên dịch cả hai tập tin với các tùy chọn mà bạn cung cấp làm việc một cách chính xác cho tôi. Bạn cần đăng thêm chi tiết vì nguyên nhân lỗi của bạn không có ở đây. –