绑定到函数的指针只能用于调用函数

Sau*_*tin 1 c++ pointers stdstring

我刚刚从char数组转移到std :: string而且我已经遇到了一个问题,我可能正在做一些非常愚蠢的事情,随意嘲笑:

int main()
{
    string * p = new string;
    memset(p, 0, sizeof(string));

    expected_exepath(p);

    cout << p->data;

    delete p;
}
Run Code Online (Sandbox Code Playgroud)

错误在p-> data中,它表示"绑定到函数的指针只能用于调用函数".p是std :: string,所以我不明白为什么它认为我正在尝试叫一个功能.

Pup*_*ppy 7

因为数据是一个函数,而不是数据成员.更重要的是,一半std::string是它是一个价值.你不应该使用new,除非你有一个非常好的reason-分配在栈上,或者如果必须动态地分配使用的容器或智能指针.

另外:永远不要忘记这样的UDT.他们一直照顾自己的内部状态,不要乱用它.


raz*_*ebe 6

错误在p-> data中,它表示"绑定到函数的指针只能用于调用函数".p是std :: string,所以我不明白为什么它认为我正在尝试叫一个功能.

几点:

  • string::data() 是一个函数,因此错误消息是完全合适的.

  • p是一个指针到一个std::string,而不是一个std::string.

  • 传递p->data()cout将是危险的,因为它data()返回一个没有空终止符的char数组,不像string::c_str().我建议你使用

    cout << *p;
    
    Run Code Online (Sandbox Code Playgroud)

    ...代替.

如果expected_exepath需要std::string*参数,那么我建议你重写这样的函数:

int main()
{
    string p;    
    expected_exepath(&p); 
    cout << p;
}
Run Code Online (Sandbox Code Playgroud)