c ++试图在不存在的构造函数中引用已删除的函数(使用rapidJson)
c++ attempting to reference a deleted function in non existing constructor (using rapidJson)
我目前遇到这个错误:
'User::User(const User&)': 试图引用已删除的函数
程序将对象的字符串值传递到 class。
用户构造函数:
User::User(string s){
int size = s.length() + 1;
char* cstr = new char[size];
strcpy_s(cstr, size, s.c_str());
user.Parse(cstr);
}
主循环:
int main(){
//json equals something similar to this: "{\"body:{[{"user":1},{"user":1},{"user":1}]}\"}";
const char * json;
Document d;
d.Parse(json);
if (d.HasMember("body")) {
if (d["body"].IsArray()) {
for (SizeType i = 0; i < d["body"].Size(); i++) {
string json = getJsonString(d["body"][i]);
User u = User(json); \this is where the error point to
this->users.push_back(u);
}
}
}
}
getJsonString 函数:
string getJsonString(Value& value) {
StringBuffer buffer;
buffer.Clear();
Writer<StringBuffer> writer(buffer);
value.Accept(writer);
return string(buffer.GetString());
}
我搜索了很多关于这个错误的解释,但对我来说似乎没有任何意义。我认为它与向量数组有关,但它对我来说没有意义,因为我没有为任何用户值使用指针或引用。它似乎指向构造函数,但是没有传递任何指针或引用。我通过返回 json 的字符串来完成,我没有使用指针,但也许我实际上是?如果对我做错的任何解释,我将不胜感激。
User
不可复制;这意味着:
User::User(const User&)
(复制构造函数)是private
- 或已删除 (
= delete;
)
- 或隐式删除(例如 class 具有不可复制的成员,或继承自不可复制的 class)。谢谢 Yksisarvinen 的评论
这意味着您不能从另一个创建新的User
。
然后,如果你想在 vector
中存储 User
个对象(就像你 "apparently" 试图在你的 post 中做的那样,我说 "apparently" 因为 posted 代码无法编译,我不知道 this
) 你不能按值存储它们,因为包含的 vector
需要一个可访问的复制构造函数。
T
must meet the requirements of CopyAssignable
and CopyConstructible
.
但是,您可以将它们存储为指针:
std::vector<std::shared_ptr<User>> users;
users.push_back( std::shared_ptr<User>( new User( json ) );
我目前遇到这个错误: 'User::User(const User&)': 试图引用已删除的函数
程序将对象的字符串值传递到 class。
用户构造函数:
User::User(string s){
int size = s.length() + 1;
char* cstr = new char[size];
strcpy_s(cstr, size, s.c_str());
user.Parse(cstr);
}
主循环:
int main(){
//json equals something similar to this: "{\"body:{[{"user":1},{"user":1},{"user":1}]}\"}";
const char * json;
Document d;
d.Parse(json);
if (d.HasMember("body")) {
if (d["body"].IsArray()) {
for (SizeType i = 0; i < d["body"].Size(); i++) {
string json = getJsonString(d["body"][i]);
User u = User(json); \this is where the error point to
this->users.push_back(u);
}
}
}
}
getJsonString 函数:
string getJsonString(Value& value) {
StringBuffer buffer;
buffer.Clear();
Writer<StringBuffer> writer(buffer);
value.Accept(writer);
return string(buffer.GetString());
}
我搜索了很多关于这个错误的解释,但对我来说似乎没有任何意义。我认为它与向量数组有关,但它对我来说没有意义,因为我没有为任何用户值使用指针或引用。它似乎指向构造函数,但是没有传递任何指针或引用。我通过返回 json 的字符串来完成,我没有使用指针,但也许我实际上是?如果对我做错的任何解释,我将不胜感激。
User
不可复制;这意味着:
User::User(const User&)
(复制构造函数)是private
- 或已删除 (
= delete;
) - 或隐式删除(例如 class 具有不可复制的成员,或继承自不可复制的 class)。谢谢 Yksisarvinen 的评论
这意味着您不能从另一个创建新的User
。
然后,如果你想在 vector
中存储 User
个对象(就像你 "apparently" 试图在你的 post 中做的那样,我说 "apparently" 因为 posted 代码无法编译,我不知道 this
) 你不能按值存储它们,因为包含的 vector
需要一个可访问的复制构造函数。
T
must meet the requirements ofCopyAssignable
andCopyConstructible
.
但是,您可以将它们存储为指针:
std::vector<std::shared_ptr<User>> users;
users.push_back( std::shared_ptr<User>( new User( json ) );