gpt4 book ai didi

c++ - 构造函数中对 (class)(type) 的调用不匹配

转载 作者:行者123 更新时间:2023-11-28 05:11:53 24 4
gpt4 key购买 nike

我正在尝试定义一个非类型模板类构造函数,但是当我调用该类的结构成员的构造函数时,出现以下错误:

error: no match for call to ‘(ByteVector) (unsigned int)’
Key(N);
^~~

这是 AES 构造函数,也是有问题的代码:

template <unsigned int N>
AES<N>::AES(Mode mode) : IV(BLOCKSIZE), Block(BLOCKSIZE), SubKey(BLOCKSIZE), mode(mode)
{
try
{
if(N == 256 || N == 192 || N == 128)
{
Key(N);
switch(N)
{
case 256: RoundNum = 14; break;
case 192: RoundNum = 12; break;
case 128: RoundNum = 10; break;
default: break; // This should never be reached
}
}
else
throw "Size Error in AES constructor. Valid sizes: 256, 192, 128";
} catch (char const *e)
{
std::cerr << e << std::endl;
exit(1);
}
}

ByteVector 是一个简单的结构,它被传递给一个无符号整数,它给出初始化大小:

ByteVector::ByteVector(unsigned int s)
{
size = s / 8;
for(int i = 0; i < s; i++) data.push_back(0);
}

下面是精简的类定义:

typedef uint8_t Byte;
typedef struct ByteVector
{
std::vector<Byte> data;
int size;
ByteVector();
ByteVector(unsigned int size);
} ByteVector;


template <unsigned int N>
class AES
{
public:
AES();
AES(Mode mode);
protected:
ByteVector IV;
ByteVector Block;
ByteVector Key;
ByteVector SubKey;
Mode mode;
uint8_t RoundNum;
};

AES 方法在 .tcc 文件中定义,该文件包含在 AES.hh 文件中类定义的正下方

如果您将 Key(N) 放入 AES 构造函数的初始化列表中,它不会报错,但因为我正在检查 N 的大小,所以我认为它不应该放入初始化列表中。

但是,如果您将初始化列表中的调用放入 AES 构造函数的主体中,它也会为它们提示问题。

感谢任何帮助,谢谢。

最佳答案

您是否正在尝试构造 Key 对象?你不能在函数体中那样做。

要么在构造函数初始化列表中与其他成员变量一起执行,要么使用赋值:

Key = ByteVector{N};

您现在正在做的是尝试在 Key 对象上使用函数调用运算符,由于该结构没有这样的运算符,您会得到一个错误。

关于c++ - 构造函数中对 (class)(type) 的调用不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43338699/

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