gpt4 book ai didi

c++ - typedef 模板类错误

转载 作者:太空宇宙 更新时间:2023-11-04 14:17:16 29 4
gpt4 key购买 nike

我有以下类(class)

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; /*...*/ };

Transform.cpp

#include "stdafx.h"

如果是这样的话,Transform3D类好像不是Matrix模板的定义,(我希望stdafx.h中的typedef会产生编译错误,但我对Visual中的预编译头不是很熟悉工作室)。

您应该在文件 Transform.h 中 #include file Matrix.h,并将 typedef 从 stdafx.h 移到 Transform.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; /*...*/ };

关于c++ - typedef 模板类错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10222025/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com