类型定义模板类错误
typedef template class error
我有以下类
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中。可能是什么问题?
根据您的解释,我假设以下设置:
stdafx.h
// ..
typedef Matrix<4,4> Matrix3D;
// ..
矩阵.h
template < int rows, int columns > class Matrix { /*...*/ };
Transform.h
class Transform3d { Matrix3D matrix; /*...*/ };
转换.cpp
#include "stdafx.h"
如果是这种情况,类 Transform3D 似乎不是矩阵模板的定义,(我希望 stdafx.h 中的 typedef 会生成编译错误,但我对 Visual Studio 中的预编译标头不是很熟悉)。
您应该在文件 Transform.h 中 #include 文件 Matrix.h,并将 typedef 从 Transform.h 中的 stdafx.h 中移动。 或者......你应该在stdafx.h中包含Matrix.h,但只有当你的头文件足够稳定时,我才会这样做(以确保你仍然利用预编译的头)。
我的首选方式:
stdafx.h
// ..
// typedef Matrix<4,4> Matrix3D; -- removed from here
// ..
矩阵.h
template < int rows, int columns > class Matrix { /*...*/ };
Transform.h
#include "Matrix.h"
typedef Matrix<4,4> Matrix3D;
class Transform3d { Matrix3D matrix; /*...*/ };
我只用一个文件创建了项目,它确实编译了
template < int rows, int columns >
class Matrix
{
//stuff
};
typedef Matrix<4,4> Matrix3D;
class Transform3D
{
public:
Matrix3D matrix;
//some other stuff
};
void main()
{
}
因此,我认为问题与预编译标头的使用有关。你能说说更多关于你的文件是如何组织的吗?
相关文章:
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 使用命名空间时出现多个定义错误
- C++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 编写代码时C++出现错误:错误 1 错误 C2601:'circle':本地函数定义是非法的
- 在运算符重载定义中使用成员函数(const错误)
- 尝试调用 .h 文件中定义的变量时出现变量未定义错误
- 在C++中使用内联方法时出现未定义的符号错误
- 已定义函数时出现 G++ "未定义的引用"错误
- C++ G++ 编译器 - 错误:隐式声明的定义
- 链接 cmake 时出现未定义的引用错误
- 在头文件和 cpp 文件中使用一次 #pragma 时出现结构重定义错误
- 错误:未定义对'oboe::AudioStreamBuilder::openStream(oboe::AudioStream**)'的引用
- 链接阶段出现多重定义错误
- 已经以性格错误定义了
- vim ctag导致了对乐趣的错误定义
- C++ 隐式声明的编译器错误定义
- 编译器错误-定义问题.C++