Tôi có một ++ chương trình C:C++. Lỗi: void không phải là một loại con trỏ-to-object
struct arguments
{
int a, b, c;
arguments(): a(3), b(6), c(9) {}
};
class test_class{
public:
void *member_func(void *args){
arguments vars = (arguments *) (*args); //error: void is not a
//pointer-to-object type
std::cout << "\n" << vars.a << "\t" << vars.b << "\t" << vars.c << "\n";
}
};
On biên dịch nó ném một lỗi:
error: ‘void*’ is not a pointer-to-object type
Ai đó có thể giải thích những gì tôi đang làm sai tạo ra lỗi này?
Vâng, có. Bạn đã thử cho 'args' một kiểu dữ liệu khác chưa? – Blender
Bạn không có bất kỳ "loại trừu tượng nào" (tôi giả sử bạn có nghĩa là các lớp cơ sở trừu tượng) trong ví dụ này. Bạn có thể có nghĩa là '* (arguments *) args', trong đó phôi' args' từ 'void *' thành 'arguments *', _then_ dereferences nó. Mã hiện tại của bạn sẽ cố gắng dereference một 'void *' (đó là bất hợp pháp), sau đó đúc giá trị dereferenced đến một 'đối số *', mà gần như chắc chắn không phải là những gì bạn dự định. –
@ Chris Vâng đó là những gì tôi đã cố gắng để làm, nhờ làm rõ. Btw, tôi nghĩ rằng cấu trúc và các lớp học được coi là các loại trừu tượng trong khi ví dụ. int, float không trừu tượng. –