3

我不太熟悉 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;
}

主文件

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

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

    return 0;
}
4

2 回答 2

15

您可能没有在编译行中包含 Foo.cpp。它应该看起来像这样:

g++ main.cpp Foo.cpp -o testFoo
于 2010-09-07T05:42:17.337 回答
2

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

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

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

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

于 2010-09-07T07:25:29.227 回答