Множественные символы (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() и, следовательно, ошибки.

Другие вопросы по тегам