不允许成员函数重新声明

时间:2012-12-30 22:36:51

标签: c++ compiler-errors

如果我在mainwindow.cpp中定义该函数,该函数可以工作,但是当我在radiobuttons.cpp中定义它并尝试从mainwindow.cpp调用它时,项目将无法编译。

mainwindow.h

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H        
    #include <QMainWindow>

    namespace Ui {
    class MainWindow;
    }

    class MainWindow : public QMainWindow
    {
        Q_OBJECT

        public:
            explicit MainWindow(QWidget *parent = 0);

            void build_radios();  //this function

            ~MainWindow();

    };    
#endif // MAINWINDOW_H

radiobuttons.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

    void MainWindow::build_radios()
     {  

    //... some code

     }

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

void MainWindow::radio_buttons();   //error: C2761: 'void MainWindow::build_radios(void)' : member function redeclaration not allowed

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)

{

radio_buttons();

}

2 个答案:

答案 0 :(得分:5)

这不是定义,编译器将其视为类定义之外的成员函数的声明,这是非法的。只需删除该行。它不应该在那里,它没有用处。

实际上,将实际定义从radiobuttons.cpp移至mainwindow.cpp以保持一致性。为什么在不同的实现文件中声明MainWindow成员?

答案 1 :(得分:3)

  

但是当我在radiobuttons.cpp中定义它时......

除非您定义,但重新声明。 (甚至那是多余的,因为你有特定文件中包含的类的头文件。)错误消息几乎说明了问题所在:

  不允许

成员函数重新声明

当您声明MainWindow类时,内部有void build_radios();声明 - 这本身就足以声明该方法。在.cpp文件中,仅仅实现它就足够了,i。即提供的定义 - 您已经有一个声明,来自头文件中类的声明。

(事实上,你也有一个定义,但是在radiobuttons.cpp文件中 - 它应该在mainwindow.cpp中。将类的所有方法都放在一个实现文件中,不要将它们分布在多个文件和类中......以及......和......)