2013-11-23 147 views
0

如何從父類訪問變量?我想下面的代碼將做到這一點,但是當我嘗試打印出的名字在Controller.cpp值我得到的錯誤:如何訪問父類中的變量

Member access into incomplete type 'TestApp'

TestApp.cpp

#include "cinder/app/AppNative.h" 
#include "Controller.h" 

using namespace ci; 
using namespace ci::app; 
using namespace std; 

class TestApp : public AppNative 
{ 
    public: 
    void setup(); 
    void update(); 

    string name = "Parent"; 

    Controller controller; 
}; 

void TestApp::setup() 
{ 
    controller.setup(this); 
} 

void TestApp::update() 
{ 
    controller.update(); 
} 


CINDER_APP_NATIVE(TestApp, RendererGl) 

控制器.H

#pragma once 

class TestApp; 

class Controller 
{ 
    public: 
     void setup(TestApp* parent); 
     void update(); 
     TestApp* p; 
}; 

Controller.cpp

#include "Controller.h" 

void Controller::setup(TestApp* parent) 
{ 
    p = parent; 
} 

void Controller::update() 
{ 
    std::cout << p->name << std::endl; 
} 

回答

2

這與父類沒有任何關係。 TestApp在TestApp.cpp中定義,它對Controller.cpp中的代碼不可見。您需要將TestApp的定義移到Controller.cpp中的頭文件(稱爲TestApp.h),然後是#include "TestApp.h"

+0

非常感謝,我認爲我想到了 – davivid

+0

在我的測試中,我一直在Controller.h中添加'#include「TestApp.h',而不是在Controller.cpp中,我沒有意識到這有所作爲! – davivid

2

你需要把TestApp類定義在一個頭,並且包括在TestApp.cppController.cpp

0

類控制器對TestApp所具有的dara成員類不知情。它只知道在其他地方定義了類TestApp。