linux从类型void*到类型data*的转换无效,从(某些类)**到无效的转换无效**

我是这个社区的新手,并且是C++的新手,这是我试图让我的程序运行的地方。 我正在用Bruce Eckel在C++中进行思维练习,在那里,我将使用他的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);

,我得到的错误不能从产品转换**无效* 。我是不是应该使用void作为构造函数的参数void * *?我还可以传递一个包含指向未知数据类型的指针的数组,在这种情况下,struct Product?问题是,当我简单地从产品**投向void **时,根本没有使用Stack,我没有遇到任何问题,所以我发现错误实际上是在我的“构造函数”中。 正如我所说的,我是C++的初学者,也可能是我犯了一些非常简单的错误,但我似乎无法弄清楚我该怎么做。感谢所有的提前,任何帮助将被扣留!

+3

你可能不应该使用void指针作为* anything *,而是使用C++中的内存分配。 –

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值