问题在于标题,这里是代码:
#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 *,如果可以的话我会这样做;)
答案 0 :(得分:3)
代码很好,IntelliSense错误。
虽然您可能想要考虑这样一个事实:并非所有类型都可以使用NULL
进行初始化。如果您需要默认构造函数,请使用Pair() = default;
。