我在一个可能非常微不足道的问题上被困了几个小时。
这是类的最基本用法。
头文件: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”时,它可以完美运行(没有内联)!