0

我不知道为什么会出现此错误:“未声明函数”。我仍然是编程的新手,但我正在努力学习它!所以这是我的代码,如果你能帮助我,我会非常感激:主要:

#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

cp:

#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;
}
4

3 回答 3

3

从它的样子来看,您正试图从“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++ 中做任何静态的事情以来已经有一段时间了,所以如果我在第二个选项中做错了什么,请纠正我。

于 2012-05-18T02:04:34.503 回答
2

几件事:

1)在 main 中,您尚未实例化 的对象,szovegkezelo并且您正在尝试调用beolvas. 编译器正在寻找一个自由函数beolvas,而您已声明beolvas为成员函数

2)public:szovegkezelo如果您正在寻找一个不执行任何操作的默认构造函数,那么如果您需要对默认构造执行特定操作,则不具有该行,否则将其声明为 szovegkezelo()在标题中。

using namespace std3)如评论中所述,放入头文件或任何文件都不是一个好习惯 using namespace

于 2012-05-18T02:07:16.163 回答
2
  • 您的two or more data types...错误来自在公共访问说明符之后滥用...某事...。

    改变这个:

    public:szovegkezelo
    

    对此:

    public:
    

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


  • 发生您的另一个错误是因为此函数声明不正确。

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

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

    szovegkezelo myObject;
    

    然后,用它来调用函数:

    myObject.kiir (sz);
    

  • 最后,请注意您的数据成员通常应使用private访问说明符声明。protected与不继承自的普通类无关。
于 2012-05-18T02:07:45.580 回答