繁体   English   中英

为什么 my.cpp 文件无法识别包含在 .h 文件中的变量?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM