C++ 按地址访问变量
我是一个初学者,我想使用C++ 按地址访问变量,c++,C++,我是一个初学者,我想使用OlMainWindow的实例w,通过ui\u MainWidow::setupUI()函数按地址(OlMain->vref->\u x=10;)来访问\u x,但是当我编译这个程序时,我在OlMain->vref>\u x=10行上得到一个错误: error: use of undefined type 'OlMainWindow' 请帮我纠正这个错误 ui_main.h #ifndef UI_MAINWINDOW_H #define UI_MAINWINDOW_H
OlMainWindow
的实例w
,通过ui\u MainWidow::setupUI()
函数按地址(OlMain->vref->\u x=10;
)来访问\u x
,但是当我编译这个程序时,我在OlMain->vref>\u x=10行上得到一个错误:
error: use of undefined type 'OlMainWindow'
请帮我纠正这个错误
ui_main.h
#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H
#include <iostream>
#include "olvalue.h"
class OlValue;
class OlMainWindow;
class ui_MainWidow;
class ui_MainWidow {
public:
void setupUI(OlMainWindow* OlMain) {
OlMain->vref->_x=10; // _x = 10;
OlMain->vref->_x = 10;
std::cout << " ok";
}
};
#endif //UI_MAINWINDOW_H
\ifndef UI\u主窗口
#定义UI\u主窗口
#包括
#包括“olvalue.h”
类别价值;
类OLMain窗口;
类ui_;
类ui_main{
公众:
无效设置UI(OlMain窗口*OlMain){
OlMain->vref->x=10;//x=10;
OlMain->vref->x=10;
std::cout setupUI(本);
}
OlMainWindow::~OlMainWindow(){
//删除用户界面;
}
void olmain窗口::enterUsername(){
std::cout在ui\u MainWidow.h
中,setupUI()
的实现是内联的,但是当它试图访问OlMainWindow
的成员时,它失败了,因为OlMainWindow
类实际上还没有定义,只是向前声明了
您的文件设置不正确。您正在创建不属于它们的依赖项,然后尝试使用前向声明来解决循环依赖项问题,这些问题本来就不应该存在
请尝试以下方法:
OlValue.h
\ifndef OLVALUE\u H
#定义OLU值
类值
{
公众:
int x=10;
int _y=20;
};
#endif//OLVALUE\u H
ui_main window.h
\ifndef UI\u主窗口
#定义UI\u主窗口
类OLMain窗口;
类ui_主窗口{
公众:
无效设置UI(OlMain窗口*OlMain);
};
#endif//UI\u主窗口
ui_MainWindow.cpp
#包括“ui_MainWindow.h”
#包括“OlMainWindow.h”
#包括
无效ui_MainWindow::setupUI(OlMainWindow*OlMain){
OlMain->vref->x=10;
OlMain->vref->x=10;
std::cout setupUI(本);
}
OlMainWindow::~OlMainWindow(){
删除用户界面;
}
void olmain窗口::enterUsername(){
std::我可以重现错误,但还没有解释。我正在研究它。你是如何修复它的?通过不提供函数ui\u MainWidow::setupUI的内联定义,而是在ui\u MainWidow
的定义之外定义函数?或者你用另一种方式修复了它?顺便说一句,你是很高兴为你自己的问题写一个答案。我只是将setupUI(…)的定义移到适当的.cpp,因为我构建的这个与Qt-UI相同,但是Qt-setupUI函数在头文件中,我不知道它们是如何生成的。是的,这也是我的建议。
#include <iostream>
#ifndef VALUE_H
#define VALUE_H
#include "ui_mainwindow.h"
class OlValue;
class OlMainWindow;
class ui_MainWidow;
class OlValue
{
public:
int _x;
int _y;
public:
OlValue() {
_x = 10;
_y = 20;
}
};
#endif //VALUE_H
#ifndef OLMAINWINDOW_H
#define OLMAINWINDOW_H
#include <iostream>
#include <string>
#include "olvalue.h"
class OlValue;
class OlMainWindow;
class ui_MainWidow;
class OlMainWindow
{
public:
OlValue* vref = new OlValue;
OlMainWindow();
~OlMainWindow();
void enterUsername();
private:
int val;
std::string _Username;
};
#endif //OLMAINWINDOW_H
#include "olmainwindow.h"
#include <iostream>
#include <string>
class OlValue;
class OlMainWindow;
class ui_MainWidow;
OlMainWindow::OlMainWindow() {
ui_MainWidow* ui = new ui_MainWidow();
ui->setupUI(this);
}
OlMainWindow::~OlMainWindow() {
//delete ui;
}
void OlMainWindow::enterUsername() {
std::cout << "Please, enter Username: ";
std::getline(std::cin, _Username);
std::cout << "You'v accessed Username: " << _Username << std::endl;
}
#include "olmainwindow.h"
#include <iostream>
int main(int argc, char* argv[])
{
OlMainWindow* w = new OlMainWindow();
return 0;
}