我有两类构造函数的类:
MyClass(istringstream& is)
{
string line;
getline(is, line);
m_name = line;
}
MyClass() : m_name"whatever" {}
但是我把它称为主要内容:
MyClass myCLASS;
istringstream is.str("Somestring");
myCLASS(is);
Compilator说错误:无法调用'(CTrain)(std :: istringstream&)'
请你告诉我为什么?
答案 0 :(得分:1)
你有很多错误。
首先,您的初始化列表缺少一对括号;它应该是
MyClass() : m_name("whatever") {}
其次,您对is
的声明是错误的 - 您无法在自己的声明中调用对象上的函数。
它应该是这样的:
istringstream is("Somestring");
第三,和错误消息的来源,你不能显式调用构造函数 - 它在初始化对象时自动调用。
在您的代码中,myCLASS
对象已经构建,行
myCLASS(is);
表示“调用MyClass
的函数调用操作符,可以将istringstream
作为参数。
这样的功能可能看起来像void operator() (istringstream&)
,但你的代码中没有这样的东西
这绝对不是你的意思。
您应该更改对象声明的顺序,如下所示:
istringstream is("Somestring");
MyClass myCLASS(is);
答案 1 :(得分:0)
构造函数只能在声明点调用,而不能在以后调用。
MyClass myCLASS(is); // invokes a constructor
myCLASS(is); // does not invoke a constructor
答案 2 :(得分:0)
你试图在构造该类的对象之后调用MyClass构造函数 - 你不能这样做。在这一行:
MyClass myCLASS;
已经调用了默认构造函数(MyClass())。在这一行:
myCLASS(is);
您正在调用已实例化对象的构造函数(即第二次调用构造函数)。
为了工作,您的代码应该如下所示:
istringstream is("Somestring");
MyClass myCLASS(is);
如果您确实需要调用已经实例化的对象的构造函数,您可能需要阅读:
Can you invoke an instantiated object's class constructor explicity in C++?