-1

私はクラスバーを持っています:

class Bar
{
public:
Bar(void);
~Bar(void);
};

Fooオブジェクトへの参照をBarコンストラクターのパラメーターとして取得し、それをプライベート メンバーに保存する必要があるクラスbar_:

class Foo
{
private:

Bar& bar_;
public:
Foo(Bar& bar) : bar_(bar) {}
~Foo(void) {}
};

これはコンパイルされません:

「Foo」にオーバーロードされたメンバー関数が見つかりません

型指定子がありません - int と見なされます。注: C++ は default-int をサポートしていません

今、私は保証する必要があるいくつかのことを疑っています.2番目のエラーBar& bar_;Foo. 宣言するときに明示的なコンストラクターを使用する必要がありbar_ますか?

この問題に関してコンパイラがどのように機能するかを知りたいので、詳細な説明をいただければ幸いです。

ありがとう。

編集

どうやら私のコードには何も問題がなかったので、新しいコードを投稿しています。 Parser.h:

#pragma once
class Parser
{
private:
std::istream& inputStream_;
Analyzer& analyzer_;
public:
Parser(std::istream &inputStream, Analyzer& analyzer);
~Parser(void);
};

Parser.cpp:

#include "stdafx.h"
#include "Parser.h"
#include "Analyzer.h"
Parser::Parser(std::istream &inputStream, Analyzer& analyzer ) : inputStream_(inputStream),     analyzer_(analyzer) {}

Parser::~Parser(void) {}

Analyzer.h:

 #pragma once
class Analyzer
{
public:
    Analyzer(void);
    ~Analyzer(void);
};
4

1 に答える 1

1

これはコンパイルされません:

overloaded member function not found in 'Foo'    
missing type specifier - int assumed. Note: C++ does not support default-int

あなたが提供したコードスニペットは実際にコンパイルされます。ただし、これらのエラーについて少し説明できます。

最初のエラー メッセージは、クラス内で同じ名前で宣言されたメソッドとは同じ名前で異なるシグネチャを持つメソッドをコンパイルすると発生します。たとえば、次の場合:

class A {
public:
    int foo (int);
};

int A::foo () { return 0; }

コンパイラは、オーバーロードされたメンバー関数が見つからないというエラーを発行します。は とは異なるため、コンパイラはfooがオーバーロードされていると考えます。foo(void)foo(int)

2 番目のエラーは、変数または関数を型なしで定義すると発生します。これは通常、実際の問題ではなく、他の問題の結果です。たとえば、コードが宣言される前にクラスを使用しようとした場合、次のようになります。

B b;
class B {};

型指定子が見つからないという 2 番目のエラーが発生しますが、これはB最初の行で発生しています。

于 2012-06-08T11:15:15.387 に答える