C++ C++;在类内使用函数时获取错误

C++ C++;在类内使用函数时获取错误,c++,class,function,header,void,C++,Class,Function,Header,Void,我不明白为什么会出现这样的错误:“函数未声明”。我仍然是一个编程新手,但我正在努力学习它! 这是我的代码,如果您能帮助我,我将非常感激: 主要内容: #包括 #包括 #包括“szovegkezelo.h” 使用名称空间std; int main() { 字符串sz; 贝奥尔瓦斯(深圳); 基尔(深圳); 返回0; } 标题: #ifndef SZOVEGKEZELO_H_INCLUDED #define SZOVEGKEZELO_H_INCLUDED #include <iostrea

我不明白为什么会出现这样的错误:“函数未声明”。我仍然是一个编程新手,但我正在努力学习它! 这是我的代码,如果您能帮助我,我将非常感激: 主要内容:

#包括
#包括
#包括“szovegkezelo.h”
使用名称空间std;
int main()
{
字符串sz;
贝奥尔瓦斯(深圳);
基尔(深圳);
返回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
#如果包括
#包括定义SZOVEGKEZELO_H_
#包括
使用名称空间std;
szovegkezelo类{
受保护的:
字符串sz;
公众:szovekezelo
void beolvas(string&sz);
void kiir(字符串t);
};
#endif//SZOVEGKEZELO_H_包括在内
cpp:

#包括“szovegkezelo.h”
#包括
void szovegkezelo::beolvas(string&sz)
{
getline(cin,sz),;
}
void szovegkezelo::kiir(字符串t)
{

cout从外观上看,您试图从“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;
}
intmain()
{
字符串sz;
szov::beolvas(sz);
svoz::kiir(sz);
返回0;
}
静态void szovegkezelo::beolvas(字符串和sz)
{
getline(cin,sz),;
}
静态void szovegkezelo::kiir(字符串t)
{
有两件事:

1) 基本上,您没有实例化
szovegkezelo
的对象,您正在尝试调用
beolvas
。编译器正在寻找一个自由函数
beolvas
,而您已经声明
beolvas
为成员函数

2)
public:szovegkezelo
是不正确的,如果您正在寻找一个默认构造函数,它什么也不做。如果您需要对默认构造函数执行某些特定操作,请在标题中将其声明为
szovegkezelo()

3) 正如评论中所提到的,这不是一个好的做法
在头文件中使用名称空间std
,或使用名称空间的任何

  • 您的
    两个或多个数据类型…
    错误源于在该公共访问说明符之后对…某物的误用

    更改此项:

    public:szovegkezelo
    
    为此:

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


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

    >P>除此之外,还需要在调用类函数之前创建一个对象。每个对象都有自己的函数集。我将认真推荐一本初学者的C++ OOP书。

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

    szovegkezelo myObject;
    
    然后,使用它调用函数:

    myObject.kiir (sz);
    

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

不要使用
使用名称空间std
,在使用名称空间std的地方限定名称,以避免混淆1.哪一行是错误的?2.什么是
公共的:szovegkezelo
,一个缺少部分的构造函数?我猜您的问题是因为在使用函数之前没有创建类的对象,但这不应该是全部。1.These是我得到的错误:nd\Downloads\HULRAAI(2)\ZH\main.cpp | 10 |错误:“beolvas”未在此范围内声明| 2。我正在试验并将其保留在那里,对此表示抱歉,请您解释一下我如何做到这一点?正如我前面提到的,我正在编程并尝试使用新的things@user1402297,我提供了一个例子,但你真的应该读一章在一本书中。它会给你所有你需要知道的东西。非常感谢:)我相信最好的学习方法是通过任务练习。@user1402297,这是一本书的优点之一。在一章的结尾,它会给你很多不同的任务去做,这样你就可以练习每一个方面。编辑我的帖子,用一些代码来帮助你理解,但正如克里斯所说,如果你打算使用课堂,试着多读一些关于OOP的知识。1)这是我的问题,我怎样才能解决这个问题2)在我的国家,现在是凌晨4点15分,我整晚都在学习,我累了,在我实验3)我看的所有教程都告诉我这样做,但谢谢你给我的建议是:)这个修好了!非常感谢!我已经试着做了将近两个小时的工作,现在终于成功了:D非常感谢!
szovegkezelo myObject;
myObject.kiir (sz);