每当我尝试使用以下类运行程序时,都会出现与std :: stringstream newPredicate的声明链接的错误。一旦删除该声明(及其在源代码中的任何使用),该错误就会消失。
#ifndef LAB1_PREDICATE_H
#define LAB1_PREDICATE_H
#include <sstream>
class Predicate {
private:
public:
std::stringstream newPredicate;
void addToString(std::string tokenValue);
void clearString();
std::string toString();
};
#endif //LAB1_PREDICATE_H
下面是标题的源代码。我将stringstream设置为类成员,因此我可以通过任何函数进行访问。
#include "Predicate.h"
void Predicate::addToString(std::string tokenValue) {
newPredicate << tokenValue;
}
void Predicate::clearString() {
newPredicate.clear();
}
std::string Predicate::toString() {
std::string predicateString;
newPredicate >> predicateString;
return predicateString;
}
我在另一个类中多次调用谓词对象。用所需的字符串值填充它后,将其推入向量并清除它。
std::vector<Predicate> myVector;
Predicate myPredicate;
myPredicate.addToString(myString); //I call this function a few times
myVector.push_back(myPredicate);
myPredicate.clearString();
这是错误消息
error: use of deleted function 'Predicate::Predicate(const Predicate&)'
{ ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
然后是一个音符
note: 'Predicate::Predicate(const Predicate&)' is implicitly deleted because
the default definition would be ill-formed:
class Predicate {
^~~~~~~~~
答案 0 :(得分:2)
std::stringstream
是不可复制的,因此未定义Predicate
类的默认复制构造函数。
大概是您在代码中的某个位置试图复制Predicate
对象。您需要从std::stringstream
中删除Predicate
,定义自己的副本构造函数,或者不复制Predicate
对象。