我无法理解这个编译器错误。我在帖子标题中写了 class(*)() 因为我正在实例化的类称为“不透明”,但该名称不提供信息或相关。它是一个模板化的循环缓冲区和一些测试。我正在使用 opaque 类来测试具有完整类/结构类型的数据结构。我也在使用原语(目前是 int)进行测试,并且该测试函数不会给我这个编译器错误。还有比这更多的代码,但我提供了我认为相关的部分。如果您有兴趣,完整的代码在这里。
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* 并将其传递给删除:
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