【发布时间】:2011-08-26 10:57:49
【问题描述】:
这可能最好用示例代码来展示。以下用g++编译失败:
struct Base {
};
struct Derived : public Base {
};
struct Container {
Derived data_;
};
int main(void) {
Base Container::*ptr = &Container::data_;
}
我收到以下错误:invalid conversion from 'Derived Container::*' to Base Container::*'。
这是语言不允许的吗?这是编译器错误吗?我是否使用了错误的语法?
请帮忙!
关于我为什么要这样做的一些背景知识:我有几个成员数据片段,我想主要用作它们的派生类型,但我希望能够通过一些通用代码填充它们。数据将以任意顺序出现,并具有一个字符串标签,我将使用它来选择要填充的适当成员数据。我计划创建一个std::map<std::string, Base Container::*>,通过一个通用接口将数据分配给每个成员。我想避免使用巨大的 if else 构造来查找正确的成员数据。
【问题讨论】:
-
也许这只是你的例子,但在一般情况下,你不应该实现自己的容器。
-
这不太可能是编译器错误。您是否尝试编译您发布的示例?在 main() 中,“&Container::data_”实际上不是一个实例,您没有“Container”的对象。
-
对回答者的一般评论:回答前请了解会员指针。
标签: c++ member-pointers