无法访问相同类型对象中的私有成员

时间:2016-06-16 19:24:25

标签: c++ templates char

问题在于标题,这里是代码:

#include <iostream>
#include <cstring>

using namespace std;

template<typename T1, typename T2>
class Pair
{
    T1 first;
    T2 second;

 public:
    Pair(T1 _first = NULL, T2 _second = NULL) : first(_first), second(_second) {}
    Pair(const Pair<T1, T2>&  other) : first(other.first),  second(other.second) {}
};

template<>
class Pair<char*, char*>
{
    char* first;
    char* second;
public:
     Pair(char* _first = NULL, char* _second = NULL) : first(_strdup(_first)), second(_strdup(_second)) {}
     Pair(const Pair<char*, char*>& other) : first(_strdup(other.first)),  second(_strdup(other.second)) {}
};

int main()
{
    Pair<short, char> pair;
    Pair<char*, char*> pair2;
}

5智能感知:成员&#34;配对::第一个&#34; (在第20行宣布)无法进入 6智能感知:成员&#34;对::第二&#34; (在第21行宣布)无法访问

那么,对于带有指针作为数据成员的模板类来说,这是独占的吗,同一类的对象无法访问它们?什么是解决方案?我还尝试创建返回这些指针的成员函数(在此构造函数之前),然后使用它们,但之后我还有其他错误。

不确定这可能是一个重复的问题,有一个类似标题的问题,但我没有理解答案...

不建议使用std :: string而不是char *,如果可以的话我会这样做;)

1 个答案:

答案 0 :(得分:3)

代码很好,IntelliSense错误。

虽然您可能想要考虑这样一个事实:并非所有类型都可以使用NULL进行初始化。如果您需要默认构造函数,请使用Pair() = default;