【发布时间】:2025-11-29 03:40:01
【问题描述】:
以下代码(粗略地表示我正在处理的一些序列化内容)使用 g++ (http://ideone.com/0rsGmt) 进行编译,但 Visual Studio Express 2013 RC 失败并出现以下错误:
Error 1 error C2326: 'void foo::print(void)' : function cannot access 'foo::bar::member_'
Error 2 error C2039: 'bar' : is not a member of 'foo'
代码:
#include <iostream>
class foo
{
private:
struct bar
{
int member_;
};
public:
void print()
{
std::cout << sizeof(decltype(foo::bar::member_)) << std::endl;
}
};
int main(int argc, char* argv[])
{
foo f;
f.print();
return 0;
}
怎么了? Visual Studio 不足还是其他?显然我可以将结构声明移出类; Daniel Frey 在下面提供了一种解决方法;但我想知道为什么上面的代码无法在 Visual Studio 中按原样编译。
更新: 接受的答案说它应该可以工作,但对于 Microsoft 来说,通常情况下它不会。我在这里填写了一个错误报告:http://connect.microsoft.com/VisualStudio/feedback/details/801829/incomplete-decltype-support-in-c-11-compiler
(如果有人可以为问题提出更好的标题,我将不胜感激!)
【问题讨论】:
-
尝试将
bar移动到print之上,即改变顺序。 -
@DanielFrey,我交换了它们,但在 Visual Studio Express 2013 RC 中仍然遇到相同的错误。
-
对于它的价值(这可能并不多),这在 clang 3.2 上编译得很好。
decltype(bar::member_)也是如此(即没有foo)。 -
Downvoter:请建议如何改进问题!
标签: c++ visual-studio c++11 decltype visual-studio-2013