不允许重声明成员函数

Member function redeclaration not allowed

本文关键字:函数 成员 声明 不允许      更新时间:2023-10-16

如果我在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();
}

这不是定义,编译器将其视为类定义之外的成员函数的声明,这是非法的。把这条线去掉。它一开始就不应该在那里,它没有用处。

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

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

除了你不定义,而是重新声明它。(甚至这也是多余的,因为在这个特定的文件中包含了类的头文件。)错误信息大致说明了问题所在:

成员函数不允许重声明

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

(事实上,您也有一个定义,但那是在radiobuttons.cpp文件中-它应该在mainwindow.cpp。将一个类的所有方法放入一个实现文件中,不要将它们分散到多个文件和类中……和…和…)