繁体   English   中英

初始化依赖于私有模板类型(C ++)的静态类成员

[英]Initializing a static class member that depends on a private template type (C++)

我有以下情况:

class Test
{
private:
    class SubType
    {
    //...
    };
    static std::vector<SubType> v;
};

因为v是静态的,所以我使用以下命令在cpp文件中对其进行了初始化:

std::vector<Test::SubType> Test::v;

但这是行不通的,编译器告诉我“ Test :: SubType”是私有的。 我该怎么办?

谢谢!

这对我有用:

#include <vector>
using namespace std;

class A {
    class B {
    };
    static  B b;
    static vector <B> vb;
};

A::B A::b;
vector <A::B> A::vb;

我猜您忘记了#include <vector> 因为以下内容会在Comeau上编译

#include <vector>
class Test { 
    class SubType 
    { 
    //... 
    }; 
    static std::vector<SubType> v; 
};
std::vector<Test::SubType> Test::v; 

其他人则报告代码编译良好。 我想提供标准的措辞来进行备份。 11/5

第11节中的所有访问控制都会影响从特定范围访问类成员名称的能力。 对出现在成员类定义之外的类成员的定义中使用的名称进行访问控制,就好像整个成员定义都出现在成员类的范围内一样。 [...]

[例:

 class A { typedef int I; // private member I f(); friend I g(I); static I x; }; A::IA::f() { return 0; } A::I g(A::I p = A::x); A::I g(A::I p) { return 0; } A::IA::x = 0; 

在这里, A::I所有用法都格式正确,因为A::fA::x是类A的成员,而g是类A的朋友。这意味着,例如,对第一个类的访问检查必须推迟使用A::I直到确定使用A::I作为A::I类成员的返回类型为止。]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM