从(某类)**到void**的转换无效
Invalid conversion from (some-class)** to void**
我是这个社区的新手,也是c++的新手,这就是我试图让我的程序运行的地方。我正在尝试Bruce Eckel的c++思维练习,在那里,我将使用他的Stack实现并更改其构造函数,以便将指向对象的指针数组和该数组的大小作为参数。然后构造函数应该遍历数组并将每个指针压入堆栈。这是他的Stack实现,可以在他的网站上找到:
//: C04:Stack.cpp {O}
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
// Linked list with nesting
#include "Stack.h"
#include "require.h"
using namespace std;
Stack::Link::Link(void* dat, Link* nxt) {
data = dat;
next = nxt;
}
Stack::Link::~Link() { }
Stack::Stack() { head = 0; }
void Stack::push(void* dat) {
head = new Link(dat, head);
}
void* Stack::peek() {
require(head != 0, "Stack empty");
return head->data;
}
void* Stack::pop() {
if(head == 0) return 0;
void* result = head->data;
Link* oldHead = head;
head = head->next;
delete oldHead;
return result;
}
Stack::~Stack() {
require(head == 0, "Stack not empty");
} ///:~
我还没有包括他的头文件。现在,我能想到的就是这样的东西:
Stack::Stack(void** vp, int size) {
head = 0;
for (int i = 0; i < size; i++)
this->push((void*)vp[i]);
}
我试着用:
#include "Stack.h"
using namespace std;
struct product {
char ch;
float price;
};
int main(int argc, char **argv) {
product p1, p2, p3, p4;
p1.ch = 'a'; p1.price = 1.1;
p2.ch = 'b'; p2.price = 1.2;
p3.ch = 'c'; p3.price = 1.3;
p4.ch = 'd'; p4.price = 1.4;
product* ptr1 = &p1;
product* ptr2 = &p2;
product* ptr3 = &p3;
product* ptr4 = &p4;
product* ptr_arr[] = {ptr1, ptr2, ptr3, ptr4};
Stack st(ptr_arr, 4);
,我得到错误不能从product**转换为void*。我不应该使用void*作为构造函数的参数吗?我怎么能传递一个数组,其中包含指针到一个未知的数据类型,在这种情况下,结构产品?问题是,当我在main中简单地从product**转换为void**时,根本没有使用Stack,我没有遇到任何问题,所以我假设错误实际上是在我的"构造函数"中。正如我所说,我是c++的初学者,可能是我犯了一些非常简单的错误,但我似乎不知道我还能怎么做。感谢所有提前,任何帮助将不胜感激!
您可以使用void*
指向任何东西,但void**
不是avoid*
;它指向一个void*
。product*
不是void*
(它)甚至可以有不同的大小或表示)。如果你想传递一个指针到一个指针数组,你需要用数组中指针的类型,如果你想使用void**
,你必须有一个void*
的数组。
我不清楚你的代码和原来的有什么关系,甚至不知道你真正想做什么。(Stack::Stack
是一个构造函数。)
相关文章:
- 错误:从"int"到枚举c++的转换无效
- 从 'int' 到 'int*' CPP 的转换无效
- C++ PTHREADS - 无效转换无效*(*)()到无效*(*)(无效*)
- 为什么我收到"从常量指针到指针的转换无效?
- 错误:从"int"到"int*"的转换无效[-允许].我在下面提供了我的代码,我
- 从类指针到 int 的转换无效
- C++ 错误:由于 swprintf 而从 'int' 到 'const wchar_t* 的转换无效
- 错误:从'void*'到'const uint8_t* {aka const unsigned char*}'的转换无效 [-允许]
- QTextStream的操作数到二进制的转换无效
- 从类型"void*"到函数指针的强制转换无效
- 错误:从 'char' 到 'const char' [-允许] strcat(加密,密钥[i])的转换无效;
- C++ - 从 "int" 到 "unsigned char" 的缩小转换无效
- 返回对象时从'const DList<int>* const'到 'DList<int>*' [-fallowive] 的转换无效
- 错误:AES 加密密钥:从"char*"到"无符号字符"的转换无效
- 模板类实例化中的指针转换无效
- 从"int"到"矢量*"的转换无效
- 从类型"void*"到类member_function指针的强制转换无效
- 在 sprintf 中从 'signed char*' 到 'char*' 的转换无效
- 另一个:从"常量类型*"到"类型*"的转换无效
- constexpr 链表 - 从 const X* 到 X* 的转换无效