#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);
}
当我编译这个程序时,它给了我错误,所以如何删除错误。我是面向对象编程的新手。
答案 0 :(得分:4)
Solution::reverseWords(&c);
这是寻找静态(或&#34;类&#34;)函数reverseWords()
,它不存在。 (因此错误信息&#34;没有匹配的功能&#34;。)我不会解释什么是类功能,因为它超出了简单的SO答案的范围(很可能不是你正在寻找的)在这一点上无论如何)。
要调用Solution
函数,您需要该类型的对象(或实例,感谢Yann4):
Solution sol; // construct a Solution object named sol
sol.reverseWords(c); // tell the sol object to reverseWords()
&#34;面向对象的一般概念&#34;是class Solution
定义两者数据和操作该数据的函数(而不是C,其中数据通常在struct
中定义,然后几个独立定义的函数对该数据进行操作。)
请注意,在&c
的通话中您不需要reverseWords()
;这将采用c
的地址,这不是必需的:
void reverseWords( string & s );
这是一个采用字符串引用的函数。即,您使用字符串 object 作为参数调用它。 &#34;地址采取&#34;您可能熟悉C,允许修改参数,由于参数类型是 的引用而自动发生。如果您不希望参数可修改,请声明const
引用...
void reverseWords( string const & s );
...或对象(但是,它会在堆栈上创建参数的副本):
void reverseWords( string s );
无论哪种方式,您调用该函数为sol.reverseWords(c)
,即没有&
运算符。
当然,正如juanchopanza指出的那样,如果你使用 std::string
,你必须#include <string>
。
三个与此无关的说明:
&#34;裸&#34;指针(由&c
或malloc()
产生的类型)在现代C ++中很少(如果有的话)是必需的。尽可能使用参考文献,并smart pointers使用参考文献。
using namespace std;
在小型测试程序中没问题。在较大的代码库中,尤其是头文件中,显式命名空间限定(例如std::string
)更好。
虽然C ++支持面向对象,但它确实是一种多范式语言;不要被引诱认为&#34;一切都应该是一个对象&#34;。
答案 1 :(得分:3)
您必须创建类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)