1

私は次のクラスを持っています

template < int rows, int columns >
class Matrix
{
    //stuff
};

私は次のことをしています:

typedef Matrix<4,4> Matrix3D;

ただし、別のクラスで次を宣言するとエラーが発生します。

class Transform3D
{
public:
    Matrix3D matrix;
        //some other stuff
};

私が見るエラーは次のとおりです。

error C2146: syntax error : missing ';' before identifier 'matrix'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

これらはすべて 7 行目にあります。

    Matrix3D matrix;

これは VS 2010 にあります。何が問題なのですか?

4

2 に答える 2

0

あなたの説明から、私は次の設定を想定しています:

stdafx.h

// ..
typedef Matrix<4,4> Matrix3D; 
// ..

Matrix.h

template < int rows, int columns > class Matrix { /*...*/ };

Transform.h

class Transform3d { Matrix3D matrix; /*...*/ };

Transform.cpp

#include "stdafx.h"

この場合、クラス Transform3D は Matrix テンプレートの定義のようには見えません (stdafx.h の typedef がコンパイル エラーを生成すると予想しますが、Visual Studio のプリコンパイル済みヘッダーについてはよく知りません)。

ファイル Matrix.h をファイル Transform.h に #include し、typedef を stdafx.h から Transform.h に移動する必要があります。または... Matrix.hをstdafx.hに含める必要がありますが、ヘッダーファイルが十分に安定している場合にのみそうします(プリコンパイル済みヘッダーを引き続き利用できるようにするため)。

私の好みの方法:

stdafx.h

// ..
// typedef Matrix<4,4> Matrix3D; -- removed from here
// ..

Matrix.h

template < int rows, int columns > class Matrix { /*...*/ };

Transform.h

#include "Matrix.h"

typedef Matrix<4,4> Matrix3D; 

class Transform3d { Matrix3D matrix; /*...*/ };
于 2012-04-19T05:53:40.790 に答える
0

ファイルを 1 つだけ使用してプロジェクトを作成し、コンパイルしました

template < int rows, int columns >
class Matrix
{
   //stuff
};

typedef Matrix<4,4> Matrix3D; 

class Transform3D
{
public:
     Matrix3D matrix;
     //some other stuff
};

void main()
{
}

したがって、問題はプリコンパイル済みヘッダーの使用に関連していると思います。ファイルの整理方法について詳しく教えてください。

于 2012-04-19T05:31:50.140 に答える