c++ 怎样从任意类获取CDocument类指针
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ 怎样从任意类获取CDocument类指针相关的知识,希望对你有一定的参考价值。
我自己新建了一个类后怎样获取CDocument的指针呢
是个单文档应用程序
CMainFrame *pMain=(CMainFrame *)AfxGetApp()->GetMainWnd();
CXXXView *pView=(CXXXView *)pMain->GetActiveView();
CXXXDoc *pDoc = (CXXXDoc *)pView->GetDocument();
别忘了#include相应的main frame, view和doc的头文件。 参考技术A 单例模式。
class CDocument
private :
static CDocument* stInstance;
public :
static CDocument* getInstance()
if(CDocument::stInstance == null)
CDocument::stInstance=new CDocument();
return CDocument::stInstance();
.......................................................
然后任何地方就可以:
CDocument::getInstance()得到进程内唯一的对象指针。
注:如果CDocument类不能修改,就定义另外一个类,改改就行了。追问
不是这个意思
例如在
CTestView类可以调用GetDocument()函数
现在我新建了一个CMyClass类
怎么获取CTestDoc的指针呢
CTestDoc *doc=((CTestView*)AfxGetApp()->GetMainWnd())->GetDocument();
为什么要出错
……这个问题描述得…………。实在看不懂。
出错?什么错?是告诉GEtDocument()方法不能调用?
只能猜了,检查函数的权限是不是public。或者看看是不是被定义友元。
就这样 定义一个指针 pt 指向 CDocument 类;
将 C++ 结构指针从一个类传递到另一个类
【中文标题】将 C++ 结构指针从一个类传递到另一个类【英文标题】:Pass a C++ struct pointer from one class to another one 【发布时间】:2015-04-10 14:43:03 【问题描述】:我有两个不同的类(class1 class2),它们都有自己的头文件和 cpp 文件。 Class2 包含了 class1 的标题。 Class1 有两个公开的结构。 我想从 class1 中的 class2 调用一个方法,并传递两个指向结构的指针。
class1 中class2 的方法调用。 (obj是class1中class2的对象):
obj.routine(ip_s.c_str(), &NLP_data_recv, &recv_data_data); //write to harddrive
在 class2 中声明方法之后:
int routine(std::string raw_data_re, struct NLP_data_header_package *Header_data, struct NLP_data_data_package *Data_data);
出现以下错误:
“argument of type ""com::NLP_data_data_package *"" is incompatible with parameter of type ""NLP_data_data_package *""
我该如何解决这个问题?谢谢。
编辑:附加代码:
类com头(class1):
#ifndef COM_H
#define COM_H
//...
#include "Dateiverwaltung.h"
//...
class com
private:
Dateiverwaltung obj;
//...
public:
int run(void);
com(std::array<std::string,TWO> socket);
~com();
struct NLP_data_header_package
//...
NLP_data_recv;
struct NLP_data_data_package
//...
recv_data_data;
类 com cpp (class1)
//...
if (recv_command == DATA_COMMAND)
obj.routine(ip_s.c_str(), &NLP_data_recv, &recv_data_data); //write to harddrive
obj.ext_close_file();
//...
类 Dateiverwaltung 标头(class2)
#ifndef DATEIVERWALTUNG_H
#define DATEIVERWALTUNG_H
//...
#include "communication.h"
//...
public:
Dateiverwaltung(char* directory_global_re);
~Dateiverwaltung();
int routine(std::string raw_data_re, struct NLP_data_header_package *Header_data, struct NLP_data_data_package *Data_data);
int ext_close_file(void);
//...
类 Dateiverwaltung cpp (class2)
//...
int Dateiverwaltung::routine(string raw_data_re, struct NLP_data_header_package *Header_data, struct NLP_data_data_package *Data_data)
//...
【问题讨论】:
在类com
之外,其中定义的结构称为com::NLP_data_data_package
,而struct NLP_data_data_package
指的是不同的类型(您尚未定义的类型)。而且 C++ 不需要结构类型上的“struct”-warts,您只需使用名称本身即可。
不幸的是它不是那样工作的。我收到以下错误消息:错误 c2653“com”不是类或命名空间名称。好吧,实际上它是一个类,但它不起作用。
您是否碰巧在两个不同的地方有两个名为“NLP_data_data_package”的结构定义?我认为这个问题需要更多的代码和更少的散文。
不,我只有一个定义,只是在所有文件中用 strg+f 检查了它
从参数中去掉“struct”,你可能会得到更丰富的错误信息,
【参考方案1】:
错误提示存在“com::NLP_data_data_package” 和一个“NLP_data_data_package”
这是两个不同的类(对于编译器),因为它们似乎是在不同的命名空间中定义的,即 com 和默认命名空间。
【讨论】:
结构 NLP_data_data_package 在第一个类(com 类)中定义,但在将其作为指向第二类的指针传递后,我收到此错误消息。我不明白如何解决这个问题。以上是关于c++ 怎样从任意类获取CDocument类指针的主要内容,如果未能解决你的问题,请参考以下文章
在Visual C++设计中,单文档应用程序中常用的MFC类如何相互获得类的指针?(如CView类获得CDoc类的指针等