如何解决 C++ 代码中的编译错误

How to resolve a compile error in c++ code?

本文关键字:代码 编译 错误 C++ 何解决 解决      更新时间:2023-10-16
#include<iostream>
#include<stdlib.h>
using namespace std;
class Solution {
public:
  void reverseWords(string& s)
  {
    cout << s;
  }
};
int main()
{
  string c;
  // c= (char *) malloc(100*sizeof(char ));
  c = "sahil solanki";
  Solution::reverseWords(&c);
}

当我编译这个程序时,它给了我错误,所以如何删除错误。我是面向对象编程的新手。

Solution::reverseWords(&c);

这是在寻找一个不存在的静态(或"类"(函数reverseWords()。(因此出现错误消息"无匹配函数"。我不会解释什么是类函数,因为它超出了简单的 SO 答案的范围(而且很可能不是您目前正在寻找的内容(。

要调用Solution函数,您需要该类型的对象(或实例,感谢Yann4(:

Solution sol;         // construct a Solution object named sol
sol.reverseWords(c);  // tell the sol object to reverseWords()

"面向对象"的一般思想是class Solution定义数据和对该数据进行操作的函数(与C相反,C通常以struct定义数据,然后几个独立定义的函数对该数据进行操作(。

请注意,在调用reverseWords()时不需要&c;这将获取c地址,这不是必需的:

void reverseWords( string & s );

这是一个接受字符串引用的函数。 即,你用一个字符串对象作为参数来调用它。您可能熟悉的C中的"地址获取",允许修改参数,由于引用的参数类型而自动发生。如果您不希望参数可修改,则可以声明一个const引用...

void reverseWords( string const & s );

。或一个对象(但是,它会在堆栈上创建参数的副本(:

void reverseWords( string s );

无论哪种方式,您都可以调用该函数sol.reverseWords(c),即没有&运算符。

而且,当然,正如胡安乔潘扎指出的那样,如果你使用std::string,你必须#include <string>.


三个丢失的相关说明:

  • "裸"指针(由&cmalloc()产生的那种(在现代C++中很少(如果有的话(是必需的。尽可能使用引用,在必须使用智能指针的地方使用智能指针。

  • using namespace std;在小型测试程序中是可以的。在较大的代码库中,尤其是头文件,显式命名空间限定(例如 std::string(更好。

  • 虽然C++支持面向对象,但它确实是一种多范式语言;不要被引诱认为"一切都应该是一个对象"。

您必须创建一个类 Solution 的对象,然后使用该对象调用您的函数。

#include<iostream>
#include<stdlib.h>
using namespace std;
class Solution {
public:
  void reverseWords(string s)
  {
    cout << s;
  }
};
int main()
{
  string c;
  // c= (char *) malloc(100*sizeof(char ));
  c = "sahil solanki";
  Solution s;
  s.reverseWords(c);
}

编辑:

如果使函数static,则可以在不创建对象的情况下调用函数。
取代

void reverseWords(string s)

static void reverseWords(string s)