不允许重声明成员函数
Member function redeclaration not allowed
如果我在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
。将一个类的所有方法放入一个实现文件中,不要将它们分散到多个文件和类中……和…和…)
相关文章:
- 如何使用指针传递给函数的数组中对象的函数成员
- c++构造函数成员初始化:传递参数
- 创建 std::函数,它返回具有函数成员值的变量.分段错误
- 如何在C++通过公共函数访问私有函数成员?
- 解释了构造函数成员初始化列表
- 调用std::函数成员时内存损坏
- 是否可以为模板类的模板函数成员设置别名?
- 捕获 lambda 函数C++成员变量
- 构造函数成员初始值设定项跨成员列出,安全吗?
- 获取与在模板参数中传递的函数成员类型相同的类
- 如何从公共函数成员访问地图私有成员
- C 构造函数成员分配优化
- 使用命名空间进行函数成员定义
- 函数成员作为 CUDA 内核的参数
- 模板基类函数成员的别名
- 函数成员中用于void和继承的enable_if
- 头文件中是否定义了一个很长的Class函数成员
- 类内/构造函数成员初始化
- 使用指向部分专用函数成员的指针自动填充向量
- 指向函数成员的指针