让我们
gf.h
typedef unsigned short gf_t;
class GaloisField{
public:
gf_t * gf_exp;
gf_t * gf_log;
int gf_extension_degree, gf_cardinality, gf_multiplicative_order;
static gf_t gf_ord();
static int gf_inv(int x);
gf.cpp
gf_t GaloisField::gf_ord(){
return gf_multiplicative_order;
}
int GaloisField::gf_inv(int x){
return gf_exp[GaloisField::gf_ord() - gf_log[x]]; //line 181
}
我收到消息: gf.cpp:181:错误:类型'gf_t'和'gf_t()(gf_t)'到二进制'运算符 - '的操作数无效。为什么这样?
答案 0 :(得分:5)
由于gf_inv
是一个静态函数,因此没有this
指针。如果没有this
,则无法访问gf_log
。
我不知道为什么错误信息如此神秘。
答案 1 :(得分:0)
您的代码中有几个问题:
gf_ord
定义为static
,但它不能,因为它返回一个实例字段。你的意思可能是const
,gf_inv
gf_ord
返回gf_t
,但内部字段为int,可能会出现舍入错误这可能是一个更好的宣言:
#include <exception>
class GaloisField{
protected:
gf_t * gf_exp;
gf_t * gf_log;
int gf_extension_degree, gf_cardinality;
gf_t gf_multiplicative_order;
public:
GaloisField();
gf_t gf_ord() const;
int gf_inv(int x) throw(std::runtime_error);
// ...
};
和gf.cpp
GaloisField::GaloisField() {
// here you should initialize your protected fields to default values
// and create the gf_exp and gf_log arrays
}
gf_t GaloisField::gf_ord() const {
return gf_multiplicative_order;
}
int GaloisField::gf_inv(int x) {
int idx = gf_ord() - gf_log[x];
if (idx >= 0)
return gf_exp[idx];
throw std::runtime_error("gf_inv");
}
如果您没有初始化类中的数组,则会出现运行时错误,尤其是第181行。
也许您还需要另一个构造函数来为您的内部字段提供正确的值。