首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++静态匿名类类型数据成员

C++静态匿名类类型数据成员
EN

Stack Overflow用户
提问于 2012-04-16 00:41:56
回答 2查看 947关注 0票数 3

我试图像编写属性一样编写C#,所以我得到了这样的结果:

代码语言:javascript
复制
#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();
}

最后我得到了这个错误:

代码语言:javascript
复制
error LNK2001: unresolved external symbol 
"public: static class Timer::<unnamed-type-y>y> Timer::y"

如果有人告诉我原因,我将不胜感激。

所以它只是一个声明,这太糟糕了,我能不能找到一些方法来定义它,而不是在其他地方定义y,或者初始化它,我只是不喜欢这样,如果不给匿名类型一个名字就不能这样做。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-16 01:26:02

我能想到的最简单的解决方案(尽管它为您的未命名类引入了名称):

代码语言:javascript
复制
#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,这样类本身就不能从类外部访问。请参阅更新的代码。

票数 1
EN

Stack Overflow用户

发布于 2017-08-01 21:55:11

之所以会出现这个错误,是因为您必须在某个地方定义y,但您只是在类定义中声明了它。声明它可能很棘手,因为它没有任何命名类型,并且您必须在声明它时指定类型。但在C++11中,您可以使用decltype来完成此操作:

代码语言:javascript
复制
#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();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10163938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档