gpt4 book ai didi

c++ - gcc中class(*)()的含义

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:54:40 25 4
gpt4 key购买 nike

我无法理解这个编译器错误。我在帖子标题中写了 class(*)() 是因为我正在实例化的类称为“不透明”,但该名称不提供信息或相关性。它是一个模板化的循环缓冲区和一些测试。我正在使用不透明类来测试具有完整类/结构类型的数据结构。我也在用基元(目前是 int)进行测试,并且该测试函数不会给我这个编译器错误。代码比这更多,但我已经提供了我认为相关的部分。完整代码是 here如果你感兴趣。

gcc 错误:

tests.cpp: In function ‘bool opaque_fill_test(int)’:
tests.cpp:97:23: error: no matching function for call to ‘CircBuf<opaque>::remove(opaque (*)())’

测试.cpp:

struct opaque {
int id;
opaque(int n): id(n) {}
opaque operator=(const opaque &o) { this->id = o.id; }
};

opaque rcv();
CircBuf<opaque> c(size);
for (int i=0; i<size; i++) {
if ( c.remove(&rcv)) {
if (rcv.id != i ) {
cout << "wrong value: " << rcv << " "
<< "should be: " << i << endl;
return false;
}
} else {
cout << "remove fail at i=" << rcv << endl;
return false;
}
}

CircBuf.h:

template<typename T> class CircBuf {
...
template<typename T> bool CircBuf<T>::remove(T *t) {
...
*t = data[front];
...

如果我声明一个不透明*并将其传递给移除:

opaque rcv();
opaque* p = &rcv;
for (int i=0; i<size; i++) {
if ( c.remove(p)) {
...
...

我得到一个类似的错误:

tests.cpp: In function ‘bool opaque_fill_test(int)’:
tests.cpp:96:16: error: cannot convert ‘opaque (*)()’ to ‘opaque*’ in initialization

最佳答案

如果您有声明 foo x();,则表达式 &x 实际上是一个函数指针,可分配给类似 foo *(y)( )。上一个示例中的 p 变量不是这样的函数指针,而只是指向 opaque 结构的指针。因此,您不能将函数指针分配给该变量。

[编辑]刚记起来:也许您打算声明一个 opaque 变量并使用默认构造函数对其进行初始化。然后省略括号。这是 C 语言遗留下来的语法。如果您实际将值放在中间以调用不同的构造函数,则只能在此处使用括号。

关于c++ - gcc中class(*)()的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11707533/

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