Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 按地址访问变量_C++ - Fatal编程技术网

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;
}