gpt4 book ai didi

c++ - 多重定义符号 (C++)

转载 作者:行者123 更新时间:2023-12-01 22:47:53 25 4
gpt4 key购买 nike

我是个新手,在我的 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()
}

字符串解析器.cpp

#include <string>
#include <vector>

someType splitAtChar(){
...
}

这会在 VS 代码中产生两个错误:

LNK2005 "class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > __cdecl splitAtChar(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,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?$allocator@D@2@@2@D@Z) already defined in CardBase.obj

one or more multiply defined symbols found

最佳答案

是的,不要将一个 cpp 文件包含在另一个 cpp 文件中。使用头文件。

CardBase.cpp

#include "StringParser.h"

someType Class1::someMethod (param){
// Use splitAtChar()
}

字符串解析器.cpp

#include "StringParser.h"
#include <string>
#include <vector>

someType splitAtChar(){
...
}

StringParser.h

#ifndef STRING_PARSER_H
#define STRING_PARSER_H

someType splitAtChar();

#endif

这是基本内容,您的 C++ 书籍应该解释如何组织代码。

关于c++ - 多重定义符号 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60836832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com