0

「first.h」でクラスを次のように宣言しました。

class MyClass
{
public:
    MyClass ( cv::Mat& _model ) : tmpM ( _model )
    {
    };
private:
cv::Mat& tmpM;
}

次に、「first.cpp」で、次のように使用しました。

MyClass::tmpM ( cv::Mat& _model )
{
    ...
}

次に、この「first.h」を「second.h」に含め、この「second.h」を「third.h」に含めてから、「third.cpp」にこれを実行しようとしました。

cv::Mat testMat ( height, width, CV_8UC3 );
tmpM myM ( testMat );

次に、次のようなエラーが発生しました。

'MyClass :: tmpM':関数ではありません

エラーC2512:'MyClass':適切なデフォルトコンストラクターが利用できません

IntelliSense:宣言は「cv :: Mat&MyClass::tmpM」と互換性がありません

IntelliSense:明示的な型がありません(「int」を想定)

あなたが尋ねる前に、私は確かにこれについて検索して尋ねたと言わなければなりませんが、それでもそれを解決することができませんでした。私は学習者ですが、誰かが私を助けてくれるでしょうか?ありがとうございました。

4

2 に答える 2

2

あなたが得たエラーは非常に明白です。

'MyClass::tmpM': not a function

tmpM関数ではなく、宣言に由来することを意味します

MyClass::tmpM ( cv::Mat& _model ) {
    ...
}

あなたは混乱していて、コンストラクターを宣言したかったと思います。その場合、ヘッダー ファイルに書き込む必要があります (デフォルトのコンストラクターを追加しました)。

class MyClass {
public:
    MyClass ( cv::Mat& _model );
private:
    MyClass(); // Private default constructor
    cv::Mat& tmpM;
}

そして、あなたのcppファイルで

MyClass::MyClass( cv::Mat& _model ) {
    // Do things
}

これにより、2 番目のエラー メッセージが解決されます。

error C2512: 'MyClass': no appropriate default constructor available

行にあるため、3番目のファイルも問題があります

tmpM myM ( testMat );

tmpMタイプではありません。私はあなたが意味したと思います

MyClass myM( testMat );

それが、最後の 2 つのエラーが伝えていることです。

于 2012-10-21T12:09:04.840 に答える
1

あなたはこれを宣言しました:

cv::Mat& tmpM;

そしてそれを次のように再宣言しました:

MyClass::tmpM ( cv::Mat& _model )

最初に、オブジェクトで宣言します。2 番目では、関数を宣言します。

それらが一致するように、どちらか一方を修正します。

于 2012-10-21T12:08:39.693 に答える