【发布时间】:2013-01-10 05:35:04
【问题描述】:
我在一个可能非常微不足道的问题上被困了好几个小时。
这是类的最基本用法。
头文件:person.h
class person
{
protected:
std::string _Name;
public:
void setName(std::string);
};
实现:person.cpp
#include <string>
#include "person.h"
void person::setName(std::string name)
{
_Name = name;
}
驱动程序:main.cpp
#include <iostream>
#include "person.cpp"
int main()
{
std::cout << "Yes, it worked.\n";
return 0;
}
尝试在 CodeBlocks 中编译此代码(使用 GNU GCC)时,我收到一个错误:
~\person.cpp|5|multiple definition of `person::setName(std::string)'|
~\person.cpp|5|first defined here|
||=== Build finished: 2 errors, 0 warnings (0 minutes, 0 seconds) ===|
我在头文件中有一个原型,在实现文件中有正文。多重定义在哪里?如果我在 person.cpp 中的 'void' 之前添加 'inline' 就可以了,但是在这种情况下我为什么要这样做呢?
此外,当在 cmd 中编译与“g++ main.cpp -o main.exe”相同的代码时,它可以完美运行(没有内联)!
【问题讨论】:
-
不包含 cpp 文件。链接它们。除此之外,您的标题应该有一个包含保护。
标签: c++ compiler-errors codeblocks