C++ 当类的构造函数调用其成员函数时,是否会发生使用已删除函数错误?
我需要构造函数做一些工作,因此我在构造函数中调用一个成员函数:C++ 当类的构造函数调用其成员函数时,是否会发生使用已删除函数错误?,c++,C++,我需要构造函数做一些工作,因此我在构造函数中调用一个成员函数: #include<iostream> #include<fstream> #include<string> using namespace std; class Token{ public: Token() {} Token(const string &targetfile); void Ge
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
class Token{
public:
Token() {}
Token(const string &targetfile);
void GetToken();
ifstream in;
};
Token::Token(const string &targetfile)
{
in.open(targetfile);
GetToken();
}
void Token::GetToken()
{
in.close();
}
int main(int argc,char *argv[])
{
Token first = Token(string(argv[1]));
return 0;
}
#包括
#包括
#包括
使用名称空间std;
类令牌{
公众:
令牌(){}
令牌(常量字符串和目标文件);
void GetToken();
如果输入;
};
令牌::令牌(常量字符串和目标文件)
{
打开(目标文件);
GetToken();
}
void标记::GetToken()
{
in.close();
}
int main(int argc,char*argv[])
{
令牌优先=令牌(字符串(argv[1]);
返回0;
}
我得到了这样的错误:
已删除函数“Token::Token(Token&&)”的使用
注意:“Token::Token(Token&&)”被隐式删除,因为默认定义的格式不正确
首先使用令牌(字符串(argv[1])
而不是tokenfirst=Token(字符串(argv[1])代码>
这样就不会调用额外的move操作符。这是用g++编译的:我使用:g++-std=c++11 debug.cpp-o debug时出错。是否尝试了其他选项?ideone.com使用C++14。我发现如果我在中删除了与ifstream相关的代码,那么它就会编译。但我不知道文件流有什么问题。std::fstream
和其他流类无法复制或分配。因此,编译器无法为包含此类流的其他对象生成默认赋值运算符或复制构造函数。要么定义自己的类型,要么生活在无法复制或分配类型的环境中。顺便说一句:你可以自己回答你的问题。应该很容易发现对memberfunction的调用是否会产生影响。字符串构造函数是隐式的,首先使用标记(argv[1])代码>相反。@Dragos这是一个函数声明。@0x499602D2它可以在另一个上下文中,但在这个上下文中它是一个带有显式构造函数的变量声明。@Ulrich Eckhardt你说得对。谢谢你的观察。