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

时间:2012-05-18 01:52:51

标签: c++ class function header void

我无法弄清楚为什么我会收到此错误:“函数未声明”。我仍然是编程的新手,但我正在努力学习它! 所以这是我的代码,如果你能帮助我,我真的很高兴: 主:

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

3 个答案:

答案 0 :(得分: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 ++中做了任何静态的事情已经有一段时间了,所以如果我在第二个选项中做错了,请纠正我。

答案 1 :(得分:2)

几件事:

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

2)public:szovegkezelo是不正确的,如果你正在寻找一个默认的构造函数,如果你需要做一些特定的默认构造,那么它什么都没有,那么就是szovegkezelo()报头中。

3)如评论中所述,这不是一个好习惯    标头文件中的using namespace std或任何using namespace

答案 2 :(得分:2)

  • 您的two or more data types...错误来自于滥用......某些内容......在该公共访问说明符之后。

    改变这个:

    public:szovegkezelo
    

    到此:

    public:
    

    如果您正在尝试创建构造函数,则需要将其声明为任何其他函数,减去返回类型。


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

  • 除此之外,您需要先创建一个对象,然后才能调用该类的函数。每个对象都有自己的函数集合。我会认真推荐阅读一本优秀的初学者C ++ OOP书。

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

    szovegkezelo myObject;
    

    然后,用它来调用函数:

    myObject.kiir (sz);
    

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