我正在尝试创建一个多项式结构来保存它的系数以及它的单项式函数。但是我收到错误:
main.cpp:10:1: error: template declaration of ‘typedef’ typedef struct polynomial_t
我的代码:
template <typename precision>
typedef struct polynomial_t
{
precision coefficients[] = {1};
precision exact(precision xx) {
return (xx - 2) ^ 9;
};
} poly;
最佳答案
当 C++ 添加 class
关键字时,它也发生了变化,因此由 struct
和 class
关键字命名的实体被视为与其他类型标识符,您不再需要使用这些关键字来限定对它们的引用。部分原因是 struct
和 class
之间几乎没有区别,强制人们记住他们使用的是哪一个,或者允许人们互换使用它们会非常困惑。
唯一的区别是在结构中声明的事物的默认访问级别。 class foo { .... };
与 struct foo { private: .... };
完全相同。
所以你的 typedef
是不必要的,事实上,在 C++ 中不再合法。
要获得相同的效果,您可能应该这样做:
template <typename precision>
struct poly
{
precision coefficients[] = {1};
precision exact(precision xx) {
return (xx - 2) ^ 9;
};
};
如果您真的希望以后能够使用polynomial_t
,您可以在声明后添加typedef poly polynomial_t;
。但我不推荐它。
您的代码与其他有趣的问题一样。我不太确定这些声明的去向,但它们目前看起来不像是 C++ 中可行的多项式表示的开始。但是,这只是基于有限信息的猜测。
我特别担心的是,您似乎在尝试使用 ^
来表示求幂。 C++ 允许运算符重载,因此这样做可能非常诱人。但这是语义上的巨大变化。求幂和按位异或不像字符串连接和加法那样具有相互之间的自然直观映射。此外,^
的优先级完全错误,因为它无法在数学表达式中明智地替换求幂。
关于c++ - 模板结构错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46634397/