声明不兼容.(指针)
declaration is incompatible with .. (pointer)
我在我的.cpp文件上得到错误,这个dequeue函数应该返回一个指向节点的指针该错误是:标识符节点未定义返回值,并且声明不兼容出列。我在想我做错了什么。谢谢。
//quasiUniqueQ.h
#ifndef QUASIUNIQUE_H
#define QUASIUNIQUE_H
class quasiUniqueQ
{
private:
struct Node{
int value;
int age;
};
Node* array;
int size;
int top;
void resize();
void copy(); // wrong return value;
void aging();
public:
void operator=(const quasiUniqueQ& rhs);
quasiUniqueQ(int num = 50);
~quasiUniqueQ();
void enqueue(int newNum);
Node* dequeue();
bool isEmpty();
bool isFull();
};
#endif
//quasiUniqueQ.cpp
#include "quasiUniqueQ.h"
using namespace std;
Node* quasiUniqueQ::dequeue() //ERROR HERE
{
}
首先,Node
在quasiUnuqieQ
中声明,因此您需要
quasiUniqueQ::Node* quasiUniqueQ::dequeue() { ... }
然而,你在quasiUniqueQ
之外可以做的事情是有限的,因为Node
已经被声明为private
,所以你不能声明quasiuniqueQ::Node
或quasiUniqueQ::Node*
来分配给对quasiUniqueQ::dequeue()
调用的返回,因为你不能在类之外命名quasuUniqueQ::Node
,你将被迫在类内部定义成员函数:
struct quasiUniqueQ
{
...
Node* dequeue() { return .... ; }
};
然后,原则上可以调用该方法,但有一些限制:
quasiUnuqueQ q;
q.dequeue(); // Compiles, but is useless
quasiUniqueQ::Node* n = q.dequeue(); // Error, quasiUnuqueQ::Node is private.
auto n = q.dequeue(); // OK
不能使用返回具有较窄访问修饰符的类型的成员。在本例中,Node
结构体对您的类来说是私有的,但是您尝试从公共成员返回一个指向Node
对象的指针。因为它是私有的,Node
类型不能在类的外部使用,所以不可能从公共成员返回任何类型为Node
的东西。
您还需要完全指定结构的名称,因为类型包含在类中,但是您在类的之外定义方法:
quasiUniqueQ::Node* quasiUniqueQ::dequeue()
{
}
相关文章:
- 为什么指针不写入类的地址?
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 字符类型转换不兼容
- 我正在尝试将表的地址传递给要在另一个函数中使用的指针,但得到不兼容的指针类型
- OPENCL 警告:不兼容的指针类型将'float __global[16]'传递给类型为 '__global float4 的参数 *
- 如何警告 C 中 void 指针上的参数不兼容的类型
- 不断增加的指针数组 错误:赋值中的类型不兼容
- 两个不完全相同的函数指针是否兼容
- 不兼容的指针类型警告c
- C++函数指针类型与 Linux 和 VMS 上的候选指针类型不兼容
- 为什么函数指针和数据指针在 C/C++ 中不兼容
- C++指向函数作为参数的指针.数据类型不兼容
- C - 使用类型为 'int 的表达式初始化'int *'的不兼容指针类型
- 声明与(方法)指针不兼容
- 调用指向派生类成员的指针时,指向与对象类型不兼容的成员类型的指针
- 声明不兼容.(指针)
- 在vector中的vector之间移动指针会导致vector迭代器不兼容
- 与指针参数不兼容的无符号字符数组
- 模板和不透明指针是否在继承上不兼容
- 在Apache服务器中设置指令时出现不兼容的指针类型错误