0

これは私がフォローしているチュートリアルであり、指示されていることはすべて実行しましたが、機能しません。main.cpp、burrito.h (クラス)、burrito.cpp の 3 つのファイルがあります。

そして、ここにそれぞれ3つのファイルがあります。

main.cpp

#include <iostream>
#include "Burrito.h"
using namespace std;

int main() {

    Burrito bo;

    return 0;
}

ブリトー.h

#ifndef BURRITO_H
#define BURRITO_H


class Burrito {
    public:
        Burrito();
};

#endif // BURRITO_H

ブリトー.cpp

#include <iostream>
#include "Burrito.h"

using namespace std;

Burrito::Burrito() {
    cout << "Hello World" << endl;
}

ビルドして実行すると、次のエラーが発生します。

...undefined reference to `Burrito::Burrito()'
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 6 seconds)
1 errors, 0 warnings

CodeBlocks を使用してコンパイルしています。

4

3 に答える 3

5

CodeBlocks を使用しています

これが問題です。

C++ を学習し始めている場合は、(残念ながら)翻訳単位について学ぶことが不可欠です。Code::Blocks のような IDE は、この詳細をあなたから隠します – そして、この場合は間違っています (これは実際には Code::Blocks のせいではありませんが、構成なしでこの場合に何をすべきかを自動的に推測することはできません)。 )。

最初に、IDE をドロップし、コンパイルのためにコマンド ラインに移動します。2 つの翻訳単位を別々にコンパイルし、それらを明示的にリンクします。

g++ -o burrito.o burrito.cpp
g++ -o main.o main.cpp
g++ -o main main.o burrito.o

優れた初心者向けの C++ の本はすべて、これがどのように機能するかを説明しています。

于 2012-07-04T14:26:06.663 に答える
1

オブジェクトをリンクして最終的な実行可能ファイルを取得するときに、コンパイル済みオブジェクトを burrito.cpp ファイルから正しくリンクするのを忘れています

Makefile を使用してビルドしている場合、最終的な出力規則には「-o main main.o burrito.o」のようなものが必要です。

于 2012-07-04T14:22:58.257 に答える
0

コード ブロック 13.12 の使用 Burritto.cpp ファイルを右クリックして [プロパティ] を選択し、[ビルド] タブを選択して、コンパイル ファイルとリンク ファイルのチェック ボックスをオンにし、[OK] をクリックしてすべてを保存し、実行したところ、問題なく動作しました。

于 2015-08-15T17:08:51.557 に答える