2016-12-02 14 views
-1

この問題が発生しました: main.cpp:13:20:エラー: 'GetGrade'はこのスコープで宣言されていません GetGrade(examGrade);'GetGrade'はこのスコープ内で宣言されていません

マイコード:

main.cppに

#include "examGrade.hpp" 

int main(int argc, char* argv[]) 
{ 
    //Qt Application 
    QApplication app(argc, argv); 

    QFont font("DejaVu Sans", 18); 

    ExamGradeInput* examGrade = new ExamGradeInput(); 
    examGrade->setFont(font); 

    GetGrade(examGrade); 
    QLabel* label = new QLabel("&Exam grade: "); 
    label->setFont(font); 
    label->setBuddy(examGrade); 

    QHBoxLayout* layout = new QHBoxLayout(); 
    layout->addWidget(label); 
    layout->addWidget(examGrade); 

    //Create and display window 

    QWidget* window = new QWidget(); 
    window->setWindowTitle("Exam grade Window"); 
    window->setLayout(layout); 
    window->show(); 
    return app.exec(); 
} 

examGrade.cpp

#include "examGrade.hpp" 

ExamGradeInput::ExamGradeInput(QWidget* parent): QSpinBox(parent) 
{ 
    this->setRange(0, 100); 
} 

int GetGrade(ExamGradeInput* examGrade){ 

    int grade = (examGrade->text()).toInt(); 
    return grade; 
} 

examGrade.hpp

#pragma once 
#include <QtWidgets> 

//exaGradeInput inherits from public QSpin Box 
class ExamGradeInput: public QSpinBox 
{ 
    public: 
     ExamGradeInput(QWidget* parent = 0); 
     int GetGrade(ExamGradeInput* examGrade); 
}; 

ない私が間違っていた完全に確認してください、 C++とQtの新機能、b約1週間それをやっている。事前

おかげ

+1

問題に関連していないコードをすべて削除してください。それはここのコードの少なくとも99%です。 –

答えて

2

あなたのコード:

#include "examGrade.hpp" 

ExamGradeInput::ExamGradeInput(QWidget* parent): QSpinBox(parent) 
{ 
    this->setRange(0, 100); 
} 

int GetGrade(ExamGradeInput* examGrade){ 

    int grade = (examGrade->text()).toInt(); 
    return grade; 
} 

は次のようになります。GetGradeは、あなたのクラスExamGradeInputの内側に宣言された関数である

#include "examGrade.hpp" 

ExamGradeInput::ExamGradeInput(QWidget* parent): QSpinBox(parent) 
{ 
    this->setRange(0, 100); 
} 

int ExamGradeInput::GetGrade(ExamGradeInput* examGrade){ 

    int grade = (examGrade->text()).toInt(); 
    return grade; 
} 

、私はクラスのメンバーにまで読んで推薦します関数定義:

すばやいgoogle検索がもたらすup: https://www.tutorialspoint.com/cplusplus/cpp_class_member_functions.htm

0

他のコメントとは別に、ポインタで多くのものを保持する必要はありません。ポインターではなく、値でオブジェクトを保持することをお勧めします。私はまた、getGradeのインタフェースに疑問を呈しています。オブジェクトに作用するメソッドです。オブジェクトを明示的に渡す必要はありません。すべてのフォントを明示的に設定する必要はありません。親フォントは子に継承されますが、例外はQLabelです。ここに完全な例があります:

#include <QtWidgets> 

class ExamGradeInput: public QSpinBox 
{ 
    public: 
     ExamGradeInput(QWidget* parent = 0) {} 
     int getGrade() const { return value(); } 
}; 

int main(int argc, char* argv[]) 
{ 
    QApplication app(argc, argv); 

    QWidget window; 
    QHBoxLayout layout(&window); 
    window.setFont({"DejaVu Sans", 18}); 

    ExamGradeInput examGrade; 
    examGrade.getGrade(); 
    QLabel label("&Exam grade: "); 
    label.setBuddy(&examGrade); 
    label.setFont(window.font()); 

    layout.addWidget(&label); 
    layout.addWidget(&examGrade); 

    window.setWindowTitle("Exam grade Window"); 
    window.show(); 
    return app.exec(); 
} 
関連する問題