我整天都遇到这个问题,也许有人可以向我解释一下?我没有提供我的确切代码,但是我正在尝试提供的类似情况(以及缩短版本)。这是一个餐厅模拟器。
int main() {
Restaurant i;
string tableID;
cin >> tableID;
i.append(new Table(tableID));//this appends a new table to the linked list
}
//.h file we're not allowed to modify
class Table
{
public:
Table(const string& tableID);//constructor
private:
string* tableID;
}
// .cpp file I'm writing
Table::Table(const string& tableID){
this->tableID = tableID;
}
我收到了错误:
table.cc:9:18:错误:无法将'const string {aka const std :: __ cxx11 :: basic_string}'转换为'std :: __ cxx11 :: string * {aka std :: __ cxx11 :: basic_string *在任务中 this-> tableID = tableID;
谁能告诉我发生了什么事?对我来说,似乎它在tableID
中传递main()
的地址并将其分配给构造函数中的指针,我认为这是合法的,但也许是const
抛弃了我。
答案 0 :(得分:1)
有几个选择:
将班级tableID
中Table
的定义更改为string tableID
。在这种情况下,您将在实例中保留值的副本。
将作业更改为this->tableID
为this->tableID = &tableID
。在这种情况下,您会将tableID
参数的地址指定给this->tableID
。在这种情况下,您只会在实例中保留指向表名的指针,这可能会导致一些有趣的行为。你可能会用这种方法学到最多。
将作业更改为this->tableId = new string(tableID)
。在这里,您要分配一个新的string
,使用参数tableID
的值填充它,然后将新字符串的地址分配给实例var tableID
。但是因为您没有为此类定义析构函数,所以每次将实例销毁到Table
时都会泄漏此分配的字符串。
也许上述的某种组合最好。
祝你好运。