C++类中使用函数时出错

C++ geting error while using function inside class

本文关键字:函数 出错 C++      更新时间:2023-10-16

我不知道为什么我会收到此错误:"函数未声明"。我仍然是编程的新手,但我正在尽力学习它!所以这是我的代码,如果你能帮助我,我会很棒:主要:

#include <iostream>
#include <vector>
#include "szovegkezelo.h"
using namespace std;
int main()
{
    string sz;
    beolvas(sz);
    kiir(sz);

    return 0;
}

页眉:

#ifndef SZOVEGKEZELO_H_INCLUDED
#define SZOVEGKEZELO_H_INCLUDED
#include <iostream>
using namespace std;
class szovegkezelo {
protected:
    string sz;
public:szovegkezelo
    void beolvas(string &sz);
    void kiir(string t);

};
#endif // SZOVEGKEZELO_H_INCLUDED

.cpp:

#include "szovegkezelo.h"
#include <iostream>
void szovegkezelo::beolvas(string &sz)
{
    getline(cin, sz);
}
void szovegkezelo::kiir(string t)
{
     cout << "a beadott szoveg: " << t << endl;
     cout << "a string hossza: " << t.size() << endl;
}

从外观上看,您正在尝试从"main"调用名为"beolvas"的类函数(方法(,但由于它属于一个类,因此不能那样调用它,您需要创建该类的实例并在该实例上调用该方法,或者使函数成为静态并从类调用它。

您的第一个选择是创建类的实例,然后在类上调用方法,如下所示:

int main()
{
    string sz;
    szovegkezelo szov;
    szov.beolvas(sz);
    svoz.kiir(sz);
    return 0;
}

您的第二个选择是将类中的函数设置为静态,这样它们就不需要调用类的实例:

int main()
{
    string sz;
    szov::beolvas(sz);
    svoz::kiir(sz);
    return 0;
}
static void szovegkezelo::beolvas(string &sz)
{
    getline(cin, sz);
}
static void szovegkezelo::kiir(string t)
{
     cout << "a beadott szoveg: " << t << endl;
     cout << "a string hossza: " << t.size() << endl;
}

自从我在 c++ 中做任何静态操作以来已经有一段时间了,所以如果我在第二个选项中做错了什么,请纠正我。

  • 您的two or more data types...错误来自滥用...东西。。。之后是公共访问说明符。

    更改此设置:

    public:szovegkezelo
    

    对此:

    public:
    

    如果你试图创建一个构造函数,它需要像任何其他函数一样声明,减去返回类型。


  • 发生其他错误是因为此函数声明不正确。

  • 除此之外,您需要先创建一个对象,然后才能调用类的函数。每个对象都有自己的一组函数处理的变量。我认真地建议阅读一本好的初学者C++OOP书。

    在main的某个地方,你需要创建一个对象:

    szovegkezelo myObject;
    

    然后,使用它来调用函数:

    myObject.kiir (sz);
    

  • 最后,请注意,数据成员通常应使用 private 访问说明符进行声明。 protected与未继承自的普通类无关。

件事:

1(在主方面,您尚未实例化szovegkezelo的对象,并且您正在尝试调用beolvas。编译器正在寻找一个自由函数beolvas而您已将beolvas声明为成员函数

2(如果您正在寻找一个不执行任何操作的默认构造器,则public:szovegkezelo不正确,如果您需要对默认构造执行特定操作,则没有该行,请在标头中将其声明为szovegkezelo()

3(如评论中所述,放 using namespace std在头文件或任何using namespace