`rwhite :: circle :: draw()const 'への未定義の参照

私はなぜこの方法が見つからないのかわかりません。

私のcircle.hファイル

namespace rwhite {

class circle : public shape {
public:
//Draw shape
    void draw() const;
}

私のcircle.ccファイル。

using namespace std;

namespace rwhite{
    void circle::draw() const{
        cout << "You've drawn a Circle with a position of " << _center << " and a radius of " << _radius << ".\n";
    }
}

私の主な方法。

using namespace std;

#include "shape.h"
#include "circle.h"
#include "rectangle.h"
#include "triangle.h"
#include "shape-utils.h"//Contains answers to Q-3,4,6,7

using namespace rwhite;

int main(void) {
    circle    c;

    c.draw();
}

私はこのエラーメッセージを受け取る - `rwhite :: circle :: draw()const 'への未定義の参照

また、circle.ccファイルだけをコンパイルすると、このエラーメッセージが表示されます。

e:..... \ libmingw32.a(main.o):main.c :(。テキスト+ 0xd2):未定義の `WinMain @ 16 '

0
どのようにファイルをコンパイルしますか?
追加された 著者 Hauleth,
Uはそれを gcc circle.cc main.cc で行う必要があります。
追加された 著者 Hauleth,
あなたは@Haulethをどういう意味ですか?
追加された 著者 r0bb077,
code :: blocksのような方法でそれを行う方法はありませんか?
追加された 著者 r0bb077,

1 答え

まず、メソッド draw()が公開されていない場合は、次のようにしてください:

class circle : public shape {
public:
  void draw() const;
}

アクセス指定子を指定しない場合は、プライベートになります。

リンカーがシンボルを見つけることができないため、未定義の参照エラーが発生します。どのような方法でファイルをコンパイルするのですか? すべてファイルをコンパイルし、後ですべてのオブジェクトファイルをリンクする必要があります。

2
追加された
@ r0bb077 StackOverflowでは質問を編集できますので、 public:指定子を含むように変更することができます。 (また、このようにコードを減らすときは、縮小版をテストして同じ問題が残っていることを確認してください。そうしないと、省略した部分に問題の原因がある可能性があります)。
追加された 著者 HostileFork,
上のコードでは、 draw()にはパブリックアクセス指定子がありません。しかし、あなたはそれを忘れてしまったのですか?
追加された 著者 Morten Kristensen,
申し訳ありませんが、私はファイルを要約しました。私は実際にこの方法の前に一般公開しました!
追加された 著者 r0bb077,
申し訳ありません、私はより明確になったはずです!私はそれを私のクラスで公開しました私はちょうど私のポストにコードのそのビットを含めなかった、私はちょうどそれが私のメソッドをピックアップしていなかった理由を見たいと思った、ポストにそれを含めるとは思わなかった!
追加された 著者 r0bb077,