我在桌面上使用Visual Studio用C ++编写了一个程序。在这种环境下,程序可以毫无错误地进行编译和执行,并且输出完全符合预期。
但是,当我尝试将源代码移至linux系统并进行编译时,遇到了与使用stringstream有关的错误。该代码具有以下形式:
input
我在整个程序中多次使用了此赋值操作,就像我说的那样-使用Visual Studio进行编译时,没有引起任何问题。在我的Linux系统上,gnu编译器和intel编译器都抛出相同的错误,内容为:
#include <sstream>
#include <string>
using namespace std;
int main() {
string line;
stringstream ssline;
ssline = stringstream(line); //where the error occurs
}
我不知道如何处理此错误,也不知道为什么它似乎与系统有关。我可以重写源代码以避免使用stringstream,但是我不希望这样做。再次因为我知道它可以在我的桌面环境上工作。
我非常感谢您为解决这一难题提供的帮助。 预先感谢。
答案 0 :(得分:4)
It seems,自GCC 5起,GCC已为std::stringstream
分配了移动,而您使用的是GCC 4.8.2。
您的GCC太旧了,您需要升级。
答案 1 :(得分:0)
使用ssline.str(line);
可以完成您想要的工作(包括继续使用std::stringstream
)。
TL; DR您的代码无法编译,因为stringstream
实例不可复制(在您的GCC编译器中,引用@HolyBlackCat的答案)。
看看https://en.cppreference.com/w/cpp/language/copy_assignment。有一个标题为“删除隐式声明的副本分配运算符”的部分。代码中发生的事情是,由于std::stringstream
没有赋值运算符,并且您尝试使用它,因此编译器会尝试生成一个赋值运算符。但是,由于std::stringstream
实例不可复制,因此隐式声明的运算符被定义为已删除。