c ++“未定义引用'Foo :: Foo(std :: string)'”

时间:2010-09-07 05:39:38

标签: c++ undefined-reference

我不太熟悉c ++以及实例化对象是如何工作的,所以这可能是一件非常简单的事情。当我用g ++编译时,我得到错误“未定义引用'Foo :: Foo(std :: string)'”。我想创建一个类Foo的实例,它的构造函数中有一个字符串参数。这是代码:

foo.h中

#include <string>
using namespace std;

class Foo
{
    public:
        Foo(string s);

    private:
        string id;
};

Foo.cpp中

#include <string>
#include "Foo.h"
using namespace std;

Foo::Foo(string s)
{
    id = s;
}

的main.cpp

#include <string>
#include "Foo.h"
using namespace std;

int main()
{
    Foo foo("bar");

    return 0;
}

2 个答案:

答案 0 :(得分:15)

你可能没有在编译行中包含Foo.cpp。看起来应该是这样的:

g++ main.cpp Foo.cpp -o testFoo

答案 1 :(得分:2)

与您遇到的问题无关,但考虑进行一些小改动:

  1. 将参数传递给const引用。 const因为您不打算更改参数和引用的值,因此您不会创建任何其他临时对象。

  2. C ++有一个初始化概念,它比构造函数体中成员'id'上的赋值运算符更有效。当前版本的构造函数将调用成员id的默认构造函数,然后调用其赋值构造函数。初始化概念(即'id(s)')只会将一个方法称为复制构造函数。

    Foo :: Foo(const string&amp; s):id(s)
    {
    }