为字符

时间:2017-02-05 03:51:35

标签: c++11 pointers

我整天都遇到这个问题,也许有人可以向我解释一下?我没有提供我的确切代码,但是我正在尝试提供的类似情况(以及缩短版本)。这是一个餐厅模拟器。

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抛弃了我。

1 个答案:

答案 0 :(得分:1)

有几个选择:

  1. 将班级tableIDTable的定义更改为string tableID。在这种情况下,您将在实例中保留值的副本。

  2. 将作业更改为this->tableIDthis->tableID = &tableID。在这种情况下,您会将tableID参数的地址指定给this->tableID。在这种情况下,您只会在实例中保留指向表名的指针,这可能会导致一些有趣的行为。你可能会用这种方法学到最多。

  3. 将作业更改为this->tableId = new string(tableID)。在这里,您要分配一个新的string,使用参数tableID的值填充它,然后将新字符串的地址分配给实例var tableID。但是因为您没有为此类定义析构函数,所以每次将实例销毁到Table时都会泄漏此分配的字符串。

  4. 也许上述的某种组合最好。

    祝你好运。