0

私は c++ プログラミングとプログラミング全般に非常に慣れていません。最近、クラスのプログラムにヘッダー ファイルやその他のソース ファイル (実装) を追加しています。複数のファイルを1つのプログラムに含めるための基本を理解していることを確認するために、最も単純なプログラムを作成しようとしましたが、コンパイルされず、リンカーエラーが発生します。

すなわち:

Undefined symbols for architecture x86_64:
  "FooBar::printSomething()", referenced from:
      _main in main-d52d70.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

「g++ main.cpp implementation.cpp」を使用してターミナルでコンパイルすると、すべて正常に動作します。

私のコード:

main.cpp

#include "header.h"

int main()
{
    FooBar object;
    object.printSomething();
    return 0;
}

header.h

#ifndef _Header_h_
#define _Header_h_

#include <iostream>

using namespace std;

class FooBar{
    public:
        void printSomething();

    private:
        string helloWorld;
};

#endif

実装.cpp

#include "header.h"

void FooBar::printSomething(){
    helloWorld = "Hello World!\n";
    cout << helloWorld;
}

私は CodeRunner が大好きですが、これには本当にイライラしています。

ありがとうございました!

4

1 に答える 1

0

同様の質問がある人のために、私は解決策を見つけました

ヘッダーファイル内のクラスのヘッダーファイルと実装ファイルを別の名前にして間違えました。

header.h はfoobar.hという名前にする必要があります

implementation.cpp はfoobar.cppという名前にする必要があります

ファイルの名前を foobar.h と foobar.cpp に変更すると、プログラムはコンパイルされ、CodeRunner で問題なく実行されました。

私の教授は、クラスのヘッダー ファイルとその実装ファイルは、ファイル タイプが異なる同じ名前、つまり x.cpp と xhを使用する必要があると教えてくれました。

于 2016-11-14T17:05:29.790 に答える