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

Passing a string argument to another string

本文关键字:字符串 另一个 参数传递      更新时间:2023-10-16

我定义了这个类:

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

在Forum::Forum的构造函数中,我想传递一个字符串参数来定义title(字符串类型)

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

我在这方面有问题。在这段代码中,我得到了一个"作为一元'&'操作数所需的左值"错误。如果我擦除'&'我得到错误"从'const char*'到'char*'的无效转换[-fpermission]"。

有什么想法吗?我将如何用strcpy(或者用另一个方法)将参数传递给字符串类型,以避免上述错误?

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

 Forum::Forum(const string& k)

这使得必须提供名称更加明确,并且还允许将字符串文字作为名称进行传递:

 Forum f("Main Forum");

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

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

您不需要使用strcpy,因为这将不起的作用

使用字符串分配运算符

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

或者更好的

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

或者初始化列表

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

后者是最好的

您肯定应该了解更多关于标准库的信息。在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; 
}
相关文章: