C++静态匿名类类型数据成员
C++ static anonymous class type data member
我正在尝试编写像属性一样的 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 或初始化它,我只是不喜欢它,如果不给匿名类型一个名字就无法做到这一点。
我能想到的最简单的解决方案(尽管它为您的未命名类引入了名称):
#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
,因此无法从类外部访问该类本身。请参阅更新的代码。
您收到此错误是因为您必须在某处定义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();
}
相关文章:
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 在类 A 中创建类型为 B 类的向量 - 访问数据 [C++] [成员在两个类中都是私有的]
- 是否可以根据其数据成员的类型确定类型的大小
- 拒绝包含某些公共静态数据成员的类型
- 复制构造抽象类型的数据成员
- 引用类型的数据成员提供有关恒常正确性"loophole"
- 如果类在 C++ 中具有常量或引用类型的非静态数据成员,为什么编译器不提供默认赋值运算符?
- 具有引用数据成员的结构不是文本类型吗?
- 类数据成员指针的非类型模板参数包无法使用 gcc 编译
- 标记为 [数据成员] 时的意外类型'USN'
- 依赖于依赖类型的非静态数据成员的非限定名称
- 基类数据成员类型取决于派生类
- 类型为专用数据成员的静态成员
- QString:包括非文本类型的静态数据成员的初始化
- 由于标准而指向 Base 数据成员的指针类型
- sizeof参考对于类型和数据成员的不同
- 对齐说明符:在类型 / 上 成员数据
- 参考类型静态数据成员的问题可能是编译器错误
- 指向不完整类型的数据成员
- C++静态匿名类类型数据成员