我试图像编写属性一样编写C#,所以我得到了这样的结果:
#include <iostream>
class Timer
{
public:
static class {
public:
operator int(){ return x;}
private:
int x;
}y;
};
int main()
{
std::cout << Timer::y;
std::cin.get();
}最后我得到了这个错误:
error LNK2001: unresolved external symbol
"public: static class Timer::<unnamed-type-y>y> Timer::y"如果有人告诉我原因,我将不胜感激。
所以它只是一个声明,这太糟糕了,我能不能找到一些方法来定义它,而不是在其他地方定义y,或者初始化它,我只是不喜欢这样,如果不给匿名类型一个名字就不能这样做。
发布于 2012-04-16 01:26:02
我能想到的最简单的解决方案(尽管它为您的未命名类引入了名称):
#include <iostream>
class Timer
{
private:
class internal {
public:
operator int(){ return x;}
private:
int x;
};
public:
static internal y;
};
Timer::internal Timer::y;
int main()
{
std::cout << Timer::y;
std::cin.get();
}此外,不要尝试在C++中编写任何“类似C#”的东西,它就是不能工作。我不明白static怎么会和C# property混在一起。
编辑:您甚至可以将internal类标记为private,这样类本身就不能从类外部访问。请参阅更新的代码。
发布于 2017-08-01 21:55:11
之所以会出现这个错误,是因为您必须在某个地方定义y,但您只是在类定义中声明了它。声明它可能很棘手,因为它没有任何命名类型,并且您必须在声明它时指定类型。但在C++11中,您可以使用decltype来完成此操作:
#include <iostream>
class Timer{
public:
static class {
public:
operator int(){ return x;}
private:
int x;
} y;
};
decltype(Timer::y) Timer::y; //You define y here
int main(){
std::cout << Timer::y;
std::cin.get();
}https://stackoverflow.com/questions/10163938
复制相似问题