2016-07-28 26 views
-5

我在头文件中定义了一个结构体。然后我有一个单身类,我试图使用该结构。当我从另一个类中调用ResetVars()时,当它碰到test.numResponses =“TEST”行时,我得到一个访问冲突。我认为这与初始化有关,但我一直无法解决它。我是新来的C++,我不知道如何解决这个问题。谢谢你的帮助。写入到typdef时出现C++访问冲突struct

struct.h

typedef struct POLL_DATA 
{ 
    std::string numResponses; 
    std::string type; 
    std::string question; 
} POLL_DATA; 

ControlPolls.h

class ControlPolls 

{ 
    private: 
     static bool instanceFlag; 
     static ControlExitPolls *controlSingle; 
     ControlExitPolls(); 

     POLL_DATA test; 
    public: 

     static ControlExitPolls* getInstance(); 
     void ResetVars(); 
}; 

ControlPolls.cpp

#include "ControlPolls.h" 

bool ControlPolls::instanceFlag = false; 
ControlPolls* ControlPolls::controlSingle = NULL; 

//Private Constructor 
ControlExitPolls::ControlExitPolls() 
{ 
}; 

//Get instance 
ControlPolls* ControlPolls::getInstance() 

{ 
    if(!instanceFlag) 

    { 
     controlSingle = &ControlPolls(); 
     instanceFlag = true; 
     return controlSingle; 
    } 

    else 

    { 
     return controlSingle; 
    } 
} 

void ControlExitPolls::ResetVars() 
{ 

     test.numResponses = "TEST"; 
} 

callingClass.cpp

ControlPolls *controlSingleton; 
controlSingleton = ControlPolls::getInstance(); 
controlSingleton->getInstance()->ResetVars(); 
+1

请编辑您的问题包含一个[MCVE] – Slava

+3

为什么你需要'的typedef struct'在C++摆在首位? – Slava

+0

class A.h include struct.h – baruti

回答

2

你已经被C++的击中最幸运解析,一个编译规则说什么可能是函数声明函数声明。罪魁祸首是这一行:

POLL_DATA testPoll(); 

testPoll被视为一个函数的返回类型为POLL_DATA声明。尝试删除括号,或者简单地写POLL_DATA testPoll;,它隐式调用编译器生成的默认构造函数。 另一个较大问题在于testPollA的成员,但是您隐藏了它并在构造函数A::A()中声明了一个局部变量。我建议你完全删除构造函数,因为隐式构造函数就足够了。

您的代码一些更多的注意事项:

  • 你宣布你的a类,但后来称其为A

  • 你已经写了一个A的构造函数的实现,没有声明它像一个正确的前向声明。

另外,在C++中不需要typedef struct。它是足够的,并鼓励他们写:

struct POLLDATA { 
    ... 
}; 
+0

由于'POLL_DATA'具有一个默认的构造函数(由编译器生成),因此不需要在ctor初始化程序列表或构造函数的主体中显式初始化它。 'POLL_DATA testPoll = POLL_DATA()。'会创建一个本地,并且不会影响对象成员的实例化。此外,我看不出有任何迹象表明这可以解决OP隐含提到的问题。那么这是如何解决OP没有打算加入的错误呢? –

+0

根据您的评论进行编辑(这很明显,我的赦免)并记录了其他错误。 –

+0

@TimStraubinger嗯,它看起来更糟。 'POLL_DATA testPoll;'会有什么意义? –