【问题标题】:C++ geting error while using function inside classC++ 在类中使用函数时出错
【发布时间】:2012-05-18 01:52:50
【问题描述】:

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

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

【问题讨论】:

  • 不要使用using namespace std,在使用它们的地方限定名称以避免混淆
  • 1.错误在哪一行? 2. 什么是public:szovegkezelo,缺少部分的构造函数?我猜你的问题是由于在使用函数之前没有创建你的类的对象,但这不应该是全部。
  • 1.这些是我得到的错误:nd\Downloads\HULRAAI(2)\ZH\main.cpp|10|error: 'beolvas' is not declared in this scope| 2. 我在做实验,把它放在那里,很抱歉

标签: c++ class function header void


【解决方案1】:

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

【讨论】:

  • 你能解释一下我该怎么做吗?正如我之前提到的,我是编程的初学者并尝试尝试新事物
  • @user1402297,我提供了一个例子,但你真的应该阅读一本书中的某个章节。它会给你所有你需要知道的事情。
  • 非常感谢 :) 我相信最好的学习方法是通过任务进行低谷练习。
  • @user1402297,这是一本书的优点。在一章的最后,它应该给出大量不同的任务,以便您可以练习各个方面。
  • 用一些代码编辑了我的帖子以帮助您理解,但正如 chris 所说,如果您要使用类,请尝试阅读有关 OOP 的更多信息。
【解决方案2】:
  • 您的two or more data types... 错误来自在公共访问说明符之后滥用...某事...。

    改变这个:

    public:szovegkezelo
    

    到这里:

    public:
    

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


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

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

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

    szovegkezelo myObject;
    

    然后,用它来调用函数:

    myObject.kiir (sz);
    

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

【讨论】:

  • 这修复了它!十分感谢!我已经尝试完成这项工作将近 2 个小时,现在终于可以工作了:D 非常感谢!
【解决方案3】:

几件事:

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

2) public:szovegkezelo 是不正确的,如果您正在寻找一个什么都不做的默认构造函数,如果您需要使用默认构造做一些特定的事情,则没有该行,否则在标题中将其声明为 szovegkezelo()

3) 如 cmets 中所述,将 头文件中的using namespace std 或任何using namespace

【讨论】:

  • 1) 这是我的问题,我该如何解决 2) 我的国家是凌晨 4:15,我整晚都在学习,我累了,不小心把它放在那里了我正在试验 3) 我看过的所有教程都告诉我这样做,但谢谢你的建议:)
猜你喜欢
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-22
  • 1970-01-01
  • 2021-12-30
  • 2016-09-26
  • 1970-01-01
  • 2021-12-02
相关资源
最近更新 更多