Множественные символы (C++)
Я новичок и получаю очень странные ошибки в моем коде на C++. Насколько я могу судить, они вызваны множественными ошибками включения.
У меня есть следующие файлы
CardBase.h
#include <string>
#include <vector>
#include <map>
class Class1 {
string someString;
vector<type> someVector;
map<type,type> someMap;
type someMethod (param);
}
CardBase.cpp
#include "StringParser.cpp"
someType Class1::someMethod (param){
// Use splitAtChar()
}
StringParser.cpp
#include <string>
#include <vector>
someType splitAtChar(){
...
}
Это вызывает две ошибки в коде VS:
LNK2005 "класс std:: vector
, class std:: allocator >, class std:: allocator , класс std:: allocator >>> __cdecl splitAtChar(класс std:: basic_string , класс std:: allocator >,char)"(?splitAtChar @@ YA?AV?$vector @ V?$basic_string @ DU?$char_traits @ D @ std @@ V?$ allocator @ D @ 2 @@ std @@ V?$ allocator @ V?$basic_string @ DU?$char_traits @ D @ std @@ V?$ allocator @ D @ 2 @@ std @@@ 2 @@ std @@ V?$basic_string @ DU?$char_traits @ D @ std @@ V?$ распределитель @D@2@@2@D@Z) уже определен в CardBase.obj
а также
найден один или несколько многократно определенных символов
2 ответа
Да, не включайте один файл cpp в другой. Используйте файлы заголовков.
CardBase.cpp
#include "StringParser.h"
someType Class1::someMethod (param){
// Use splitAtChar()
}
StringParser.cpp
#include "StringParser.h"
#include <string>
#include <vector>
someType splitAtChar(){
...
}
StringParser.h
#ifndef STRING_PARSER_H
#define STRING_PARSER_H
someType splitAtChar();
#endif
Это базовые вещи, ваша книга по C++ должна объяснять, как организовать ваш код.
В вашем CardBase.cpp
#include "StringParser.cpp"
someType Class1::someMethod (param){
// Use splitAtChar()
}
Вы включаете файл.cpp. Если вы дополнительно скомпилируете это, то вы дважды определяете splitAtChar() и, следовательно, ошибки.