c++ - 模板结构错误

标签 c++ templates struct typedef

我正在尝试创建一个多项式结构来保存它的系数以及它的单项式函数。但是我收到错误:

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 关键字时,它也发生了变化,因此由 structclass 关键字命名的实体被视为与其他类型标识符,您不再需要使用这些关键字来限定对它们的引用。部分原因是 structclass 之间几乎没有区别,强制人们记住他们使用的是哪一个,或者允许人们互换使用它们会非常困惑。

唯一的区别是在结构中声明的事物的默认访问级别。 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/

相关文章:

c - 在C中读取文件时忽略不必要的字符

c++ - 保存函数指针+参数供以后使用

c++ - enable_if 使用 constexpr bool 测试不起作用

C初始化结构数组的char数组

struct 中的一个元素可以访问 C 中自身的另一个元素吗?

c++ - 解决模板不明确的问题

javascript - 蜘蛛猴: Why JS array is not inheriting default properties like length,拼接等

c++:这怎么是语义错误

c++ - Pthread_mutex_lock 返回访问错误

c++ - 为什么我必须通过this指针访问模板基类成员?