[英]Why is my .cpp file can't recognize variables from included in .h file?
我创建了两个对话框类“OpenFileDiag”和“Search_diag”,似乎 Search_diag.cpp 无法识别来自 OpenFileDiag.h 的变量,反之亦然(OpenFileDiag.cpp 无法识别来自 Search_diag.h 的变量),即使我将其包含在 OpenFileDiag.cpp 文件中。
请注意,本文档只是我的测试文档,一些变量赋值没有逻辑意义,但我只是想证明,我文档中的这两个文件无法识别彼此之间的变量。
OpenFileDiag.h 文件
#pragma once
#include <vector>
// OpenFileDiag dialog
class OpenFileDiag : public CDialog
{
DECLARE_DYNAMIC(OpenFileDiag)
public:
OpenFileDiag(CWnd* pParent = nullptr); // standard constructor
virtual ~OpenFileDiag();
// Dialog Data
#ifdef AFX_DESIGN_TIME
enum { IDD = ID_OPENFILEDIAG };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedButtonOpenfile();
class Zam
{
public:
CString name;
CString adress;
int number;
};
std::vector<Zam> z;
enum document_type {None, Text};
document_type m_document_type{ document_type::None };
afx_msg void OnBnClickedButtonVyhladatDiag();
};
Search_diag.cpp 文件
// Search_diag.cpp : implementation file
//
#include "pch.h"
#include "MFCOpenTest.h"
#include "Search_diag.h"
#include "afxdialogex.h"
#include "OpenFileDiag.h"
// Search_diag dialog
IMPLEMENT_DYNAMIC(Search_diag, CDialog)
Search_diag::Search_diag(CWnd* pParent /*=nullptr*/)
: CDialog(ID_SEARCH_DIAG, pParent)
{
}
Search_diag::~Search_diag()
{
}
void Search_diag::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_SELECT_ATRIBUTE, m_selected_atribute);
DDX_Control(pDX, ID_SELECTED_CRITERION, m_selected_criterion);
}
BEGIN_MESSAGE_MAP(Search_diag, CDialog)
// ON_CBN_SELCHANGE(IDC_SELECT_ATRIBUTE, &Search_diag::OnCbnSelchangeSelectAtribute)
ON_CBN_SELCHANGE(IDC_SELECT_ATRIBUTE, &Search_diag::OnSelchangeSelectAtribute)
END_MESSAGE_MAP()
// Search_diag message handlers
void Search_diag::OnSelchangeSelectAtribute()
{
number_of_atribute = m_selected_atribute.GetCurSel();
z[0].number = number_of_atribute;
// TODO: Add your control notification handler code here
}
问题在于“z[0].number = number_of_atribute;”这一行 Search_diag.cpp 无法从 OpenFileDiag.h 文件中识别变量“z”,即使它包含在内。
这是我得到的错误: Search_diag.cpp(47,2): error C2065: 'z': undeclared identifier
我也试过添加这样的东西: OpenFileDiag::z[0].name = number_of_atribute; 或 OpenFileDiag::Zam::z[0].name = number_of_atribute; 但这没有帮助。
class OpenFileDiag : public CDialog
{
// ...
std::vector<Zam> z;
显示的z
是名为OpenFileDiag
的 class 的成员。
void Search_diag::OnSelchangeSelectAtribute()
{
// ...
z[0].number = number_of_atribute;
// TODO: Add your control notification handler code here
}
其他一些名为Search_diag
的 class 的方法显然正在尝试访问名为z
的 class 成员。 虽然显示的代码没有定义这个 class,但大概它没有任何名为z
的成员。 仅仅因为有一个不同的 class 具有该名称的成员,并不意味着可以像这样访问它。
Search_diag.cpp 无法从 OpenFileDiag.h 文件中识别变量“z”,即使它包含在内。
在 C++ 中,无论如何,在哪个文件中声明某些内容都没有关系。 重要的是在哪些类中声明了某些东西,或者没有。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.