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;
}

main.cpp

#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)」)は、1つのメソッドをコピーコンストラクターと呼ぶだけです。

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

于 2010-09-07T07:25:29.227 に答える