我不太熟悉c ++以及实例化对象是如何工作的,所以这可能是一件非常简单的事情。当我用g ++编译时,我得到错误“未定义引用'Foo :: Foo(std :: string)'”。我想创建一个类Foo的实例,它的构造函数中有一个字符串参数。这是代码:
#include <string>
using namespace std;
class Foo
{
public:
Foo(string s);
private:
string id;
};
#include <string>
#include "Foo.h"
using namespace std;
Foo::Foo(string s)
{
id = s;
}
#include <string>
#include "Foo.h"
using namespace std;
int main()
{
Foo foo("bar");
return 0;
}
答案 0 :(得分:15)
你可能没有在编译行中包含Foo.cpp。看起来应该是这样的:
g++ main.cpp Foo.cpp -o testFoo
答案 1 :(得分:2)
与您遇到的问题无关,但考虑进行一些小改动:
将参数传递给const引用。 const因为您不打算更改参数和引用的值,因此您不会创建任何其他临时对象。
C ++有一个初始化概念,它比构造函数体中成员'id'上的赋值运算符更有效。当前版本的构造函数将调用成员id的默认构造函数,然后调用其赋值构造函数。初始化概念(即'id(s)')只会将一个方法称为复制构造函数。
Foo :: Foo(const string&amp; s):id(s)
{
}