gpt4 book ai didi

c++ - .NET c++ 中父级的子窗体调用函数

转载 作者:行者123 更新时间:2023-11-28 03:25:06 25 4
gpt4 key购买 nike

我有一个包含 2 个 winform 的应用程序:Form1.h 和 TrackEdit.h。它们都在同一个命名空间中(“ParkCleanUp2”)。

我在 Form1 中调用这段代码:

ParkCleanUp2::TrackEdit^ te;

它给我这些错误的地方:

Error   24  error C2039: 'TrackEdit' : is not a member of 'ParkCleanUp2' (TrackEdit.cpp)    c:\users\-joey\documents\visual studio 2010\projects\park cleanup 2\park cleanup 2\Form1.h  2332
Error 25 error C2065: 'TrackEdit' : undeclared identifier (TrackEdit.cpp) c:\users\-joey\documents\visual studio 2010\projects\park cleanup 2\park cleanup 2\Form1.h 2332
Error 26 error C2065: 'te' : undeclared identifier (TrackEdit.cpp) c:\users\-joey\documents\visual studio 2010\projects\park cleanup 2\park cleanup 2\Form1.h 2332

不过,如果我转到 TrackEdit.h,它会显示:

namespace ParkCleanUp2 {
//Some namespae includes
public ref class TrackEdit : public System::Windows::Forms::Form

所以我想知道为什么它给我错误“'TrackEdit':不是'ParkCleanUp2'的成员”以及为什么它正在查看 TrackEdit.cpp 文件,而我包含了.h 文件。我发现奇怪的是,也许值得一提的是,当我评论 TrackEdit.h 中的 #include "Form1.h 行时,它工作得很好,但在 TrackEdit.h 中我却不能不要调用我想要实现的 Form1 的功能(比如在列表框中选择一个项目)。

最佳答案

看来您同时拥有 Form1.h 和 TrackEdit.h,每个都#include-ing 对方。相反,有一个前向声明,并且只包含来自 TrackEdit.cpp 的 Form1.h,反之亦然。

双重包含不起作用,因为两个类都引用了另一个。每个类都需要了解另一个类才能定义自己。由于您拥有的只是完整的类定义,因此您得到了一个循环定义。相反,前向声明足以让编译器知道“好的,有一个具有该名称的类,这就是我所知道的”,并且解决了循环依赖。

(另外:当您编辑问题时,您删除了最重要的句子:“所以基本上 Form1.h 包含 TrackEdit.h,它再次包含 Form1.h”。这种模式很少是正确的。如果你看到自己在做而是提供更多的前向声明。)

像这样:

Form1.h:

namespace ParkCleanUp2 {
ref class TrackEdit;

public ref class Form1 {
TrackEdit^ track;
};
}

TrackEdit.h:

namespace ParkCleanUp2 {
ref class Form1;

public ref class TrackEdit {
Form1^ parentForm;
};
}

Form1.cpp 和 TrackEdit.cpp:

#include "Form1.h"
#include "TrackEdit.h"

关于c++ - .NET c++ 中父级的子窗体调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14306430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com