Cpp

повторяющиеся символы для архитектуры ошибка x86_64

Duplicate Symbols Architecture X86_64 Error



Мой компилятор - clion (на основе среды в xcode), система - mac, и эта ошибка возникла, когда я впервые написал класс

// // Created by apple on 2018/5/13. // #ifndef C_PRIMERPLUS_SALES_DATA_H #define C_PRIMERPLUS_SALES_DATA_H #include //#include using namespace std class Sales_data { private: string bookNo unsigned units_sold double revenue public: string isbn() const { //Implicit inline function return bookNo } Sales_data& combine(const Sales_data& ) double avg_price() const //Constant member function friend Sales_data add(const Sales_data& ,const Sales_data&) friend ostream& print(ostream& , const Sales_data&) friend istream& read(istream &is,Sales_data &item) } Sales_data add(const Sales_data &lhs,const Sales_data &rhs){ Sales_data sum = lhs sum.combine(rhs) return sum } ostream& print(ostream& os, const Sales_data& item){ os << item.isbn() << ' ' << item.units_sold << ' ' << item.revenue << ' ' << item.avg_price() return os } istream& read(istream &is,Sales_data &item){ double price = 0.0 is >> item.bookNo >> item.units_sold >> price item.revenue = price * item.units_sold return is } #endif //C_PRIMERPLUS_SALES_DATA_H // This is the corresponding .c++ file #include 'Sales_data.h' Sales_data& Sales_data::combine(const Sales_data &rhs) { units_sold += rhs.units_sold revenue += rhs.revenue return *this } double Sales_data::avg_price() const { return revenue/units_sold }

Появляется следующая ошибка:



повторяющийся символ__Z4readRNSt3__113basic_istreamIcNS_11char_traitsIcEEEER10Sales_data в:
CMakeFiles / untitled1.dir / main.cpp.o
CMakeFiles / untitled1.dir / Sales_data.c ++. Или
повторяющийся символ __Z5printRNSt3__113basic_ostreamIcNS_11char_traitsIcEEEERK10Sales_data в:
CMakeFiles / untitled1.dir / main.cpp.o
CMakeFiles / untitled1.dir / Sales_data.c ++. Или
повторяющийся символ _Z3addRK10Sales_dataS1 в:
CMakeFiles / untitled1.dir / main.cpp.o
CMakeFiles / untitled1.dir / Sales_data.c ++. Или
ld: 3 повторяющихся символа для архитектуры x86_64
clang: error: команда компоновщика завершилась неудачно с кодом выхода 1 (используйте -v, чтобы увидеть вызов)
сделать [3]: * [untitled1] Ошибка 1
сделать [2]: * [CMakeFiles / untitled1.dir / all] Ошибка 2
сделать [1]: * [CMakeFiles / untitled1.dir / rule] Ошибка 2
делать: * [untitled1] Ошибка 2



Затем я обнаружил, что ошибка файла .o определенно является проблемой во время компиляции. Обнаружив проблему, я хочу сказать то, что сказал в книге.
Я обнаружил, что в главе 3 уже был контент: функция может быть объявлена ​​много раз, а также может быть объявлена ​​для файлов, но может быть определена только один раз, в противном случае повторные определения не могут быть скомпилированы, поэтому это должно быть .h Там проблема с файлом. Переместите определение функции друга в файл .c ++, чтобы решить проблему.