【发布时间】:2015-09-22 21:08:45
【问题描述】:
我正在尝试在 linux 和 windows 上构建我的项目。该项目已经在 Windows 上运行,但我在 GCC 上遇到了一个非常奇怪的错误。考虑以下代码:
Class Base {
private:
MessageInfo *createMsg();
}
Class MessageInfo {
private:
class Message{
...
}
public:
Message *messages[MAX_NO_MESSAGES];
...
}
MessageInfo *Base::createMsg(){
...
MessageInfo *newMsg = new MessageInfo;
newMsg->messages[i] = new MessageInfo::Message();
...
}
现在的问题是,在 Visual Studio 中,所有东西都可以编译,但在 GCC 中,我收到以下错误:
*错误:MessageInfo::Message 类是私有的
我真的很惊讶代码实际上是在 Visual Studio 中编译而不是在 GCC 中。有什么建议???
编辑:
我想我必须以更好的方式提出我的问题。我的问题是怎么可能在 VS 2005 中编译这样的代码???我在 VS2013 中尝试了我的代码,它给了我与 GCC 相同的错误。所以我并不是说代码是正确的!
【问题讨论】:
-
我 99% 肯定 GCC 是正确的,而 Visual Studio 是错误的,但我无法引用标准语言来达到这种效果,我也不知道为什么 Visual Studio 会出错 - 这是一个语言的非常非常基本的方面。
-
你应该发布一个 MCVE。
-
您能否准确告诉我们您使用的是哪个版本的 Visual Studio?最新版本比旧版本更符合 C++ 标准。
-
什么版本的 Visual Studio? VS 2015 产生与 GCC 相同的错误:
error C2248: 'MessageInfo::Message': cannot access private class declared in class 'MessageInfo'。 VS 2013 也会产生同样的错误。 VS 2012 - 同样的错误。你在用一些过时的东西吗? -
这甚至不会远程重现您的问题,因此在您提供可编译示例之前,该问题无法回答。
标签: c++ visual-c++ gcc