将字符串参数传递给另一个字符串

时间:2016-01-04 14:21:15

标签: c++ string

我定义了这个类:

class Forum{
std::string title;
Thread* threads[5];

并且在Forum :: Forum的构造函数中我想传递一个字符串参数来定义title(它是type-string)

Forum::Forum(string *k) {
int i;
std::strcpy(&title.c_str(),k->c_str());

我遇到了问题。在这段代码中,我得到一个"左值作为一元'&'操作数"错误。 如果我擦除'&'我得到了错误"来自' const char *'的无效转换到#char;' [-fpermissive]"

我是如何设法将strcpy(或其他方法)的参数传递给字符串类型以避免上述错误?

3 个答案:

答案 0 :(得分:7)

除非您打算允许省略标题,否则我建议您传递const引用而不是指针:

 Forum::Forum(const string& k)

这使得更清楚的是必须提供名称,并允许传递字符串文字作为名称:

 Forum f("Main Forum");

然后,要复制std::string,只需指定它或使用其复制构造函数即可。 strcpy仅适用于C风格的char*字符串。在这种情况下,请使用成员初始值设定项:

Forum::Forum(const string& k):
  title(k)
{
}

答案 1 :(得分:3)

您无需使用strcpy - 因为这不起作用

使用字符串赋值运算符

Forum::Forum(string *k) {
    title = *k; 
}

或者更好

Forum::Forum(const string& k) {
    title = k; 
}

或者初始化列表

Forum::Forum(const string& k) : title(k) { }

后者是最好的

答案 2 :(得分:0)

您应该更多地了解标准库。在C ++中,您可以将一个std::string分配给另一个,而不会弄乱指针和strcpy

Forum::Forum(const std::string& k) {
    // int i; you aran't using this anywhere, so why declare it?
    // as pointed out by @EdHeal, this-> is not necessary here
    /*this->*/ title = k; 
}