Dum*_*ior 0 c++ void-pointers unions
我有以下代码(住在Coliru):
// untouchable extern library .hpp file
typedef union ExternLibraryUnion
{
int a;
float b;
}ExternLibraryUnion;
// my code
#include <iostream>
class Container{
public:
Container() : m_union(NULL) {};
~Container(){
if(m_union){
delete m_union;
}
}
void init(){
m_union = new ExternLibraryUnion();
}
ExternLibraryUnion* get_union(){
return m_union;
}
private:
ExternLibraryUnion* m_union;
};
class Master{
public:
Master() : m_union(NULL) {
m_container.init();
};
~Master(){
if(m_union){
delete static_cast<ExternLibraryUnion*>(m_union);
}
}
void load(){
}
void set(int i){
m_union = m_container.get_union();
m_union->a = i;
}
void* get_union(){
return m_union;
}
private:
void* m_union;
Container m_container;
};
class Worker{
public:
Worker() : m_extern_library_union(NULL) {};
~Worker(){
if (m_extern_library_union){
delete m_extern_library_union;
}
}
void load(Master& master){
m_extern_library_union = reinterpret_cast<ExternLibraryUnion*>(master.get_union());
}
int get_int(){
return m_extern_library_union->a;
}
private:
ExternLibraryUnion* m_extern_library_union;
};
int main()
{
Master master;
master.set(3);
Worker worker;
worker.load(master);
std::cout << worker.get_int() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
代码产生:
main.cpp: In member function 'void Master::set(int)':
main.cpp:55:16: error: 'void*' is not a pointer-to-object type
m_union->a = i;
^~
Run Code Online (Sandbox Code Playgroud)
在extern库中,union ExternLibraryUnion定义了一个我在自己的代码中使用的库.我的问题,我无法理解,是在set课堂上的方法Master.该Master成员void* m_union应指向存储在构件内部的工会Container m_container.在我设置的时候m_union = m_container.get_union(),编译器应该能够知道我ExternLibraryUnion*从get_union()方法调用中得到了回报.所以我并不完全是因为作业而产生的错误m_union->a = i.当然,a void*没有类型,但我为它指定了精确类型的指针ExternLibraryUnion.
我们也说我不能Container m_container直接触摸对象.我需要通过void* m_union指针进行分配.
任何帮助都非常感谢!
编译器有不知道什么m_union可能实际上在被人指指点点.你宣称它是一个void *编译器相信你,它别无选择.而这一切也都知道,所以m_union->a必须被标记为错误,因为->a这里已经没有任何意义的编译器.
换句话说,抛开RTTI,指针不知道他们指的是什么.编译器只知道指针的声明方式.
我不知道还能说什么,它真的很简单.我不喜欢这样说,但从整体上看代码,它看起来像是一团糟.谁写的?
[编辑]杰弗里说的确实会解决它,但那不是你问的问题.
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |