模板结构错误
Template Struct Error
我正在尝试创建一个多项式结构,该结构保存其系数以及它的单项函数。然而,我得到了错误:
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++允许运算符重载,因此这样做可能非常诱人。但这是语义上的巨大变化。指数运算和逐位异或运算不像字符串串联和加法那样具有自然的直观映射。此外,^
在数学表达式中合理地代替幂运算的优先级是错误的。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <math.h>
#include <limits>
using namespace std;
// ONLY MESS WITH THIS STRUCT
template <typename precision>
struct polynomial
{
int degree = 9;
precision coefficients[] = {0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0};
precision exact(precision xx) {
return pow(xx-2 , 9);
};
} poly;
void summary(const char* prec) {
printf("=========================n");
printf("nPrecision: %sn", prec);
printf("=========================n");
}
template <typename precision>
precision Horners(const precision xx) {
precision qq = poly<precision>.coefficients[poly<precision>.degree];
for(int i = poly<precision>.degree-1; i >= 0; i--) {
qq = xx * qq + poly<precision>.coefficients[i];
}
return qq;
}
template <typename precision>
precision ForwardError(const precision xx) {
precision pTilde;
for(int i = 0; i <= poly<precision>.degree; i++) {
pTilde += abs(poly<precision>.coefficients[i]) * (abs(xx) ^ i);
}
precision machineEps = numeric_limits<precision>::epsilon();
precision bound = pTilde * (2 * poly<precision>.degree * machineEps) /
(1 - 2 * poly<precision>.degree * machineEps);
return bound;
}
/*
Parameter 1: Singl/Double precision
Parameter 2:
*/
int main(int argc, char *argv[]) {
char prec[6];
if((strcmp(argv[1], "s") == 0) || (strcmp(argv[1], "S") == 0))
strcpy(prec, "Single");
else if((strcmp(argv[1], "d") == 0) || (strcmp(argv[1], "D") == 0))
strcpy(prec, "Double");
else {
printf("Invalid precision identifiern");
return -1;
}
summary(prec);
float tt = 2.01;
float qq = Horners(tt);
printf("Answer is %fn", qq);
return 0;
}
相关文章:
- 创建结构的数组时遇到分段错误
- 使用具有结构不完整类型错误的模板
- 在头文件和 cpp 文件中使用一次 #pragma 时出现结构重定义错误
- 导致Segmentation错误的结构中的矢量
- 编译器指出结构和 int 说明的错误 2059
- 当结构位于单独的头文件中时'unregistered datatype'在 QML 中出现Q_GADGET错误
- 在 C 函数中返回结构会导致分段错误
- C++ 结构错误"调用'erase'没有匹配函数
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 结构中的错误"Incomplete type is not allowed"
- 体系结构x86_64的未定义符号:链接器错误
- 在另一个结构中声明内部结构会导致错误:结构使用无效
- 如何编写一个错误结构,该结构可以包含不同的强键枚举作为错误代码
- 错误:结构的初始值设定项太多
- 带有结构和指针的程序错误(结构,C++)
- 错误:结构的正向声明
- 使用结构体作为参数:错误:结构体未定义
- 定义错误结构体中的枚举
- "Was not declared in this scope"错误结构定义。C++
- GCC中可能的错误:结构中的文字字符串类型