C++错误:在这个范围内未声明的对象

C++错误:在这个范围内未声明的对象,c++,g++,C++,G++,谁能解释一下我为什么会出现以下错误 A.cpp: In member function ‘void A::NewObject(int)’: A.cpp:11: error: ‘list_a’ was not declared in this scope 我试着在不同的地方申报清单。现在它在prog.cpp中,在main中。我不明白为什么它不在范围内 我的简化代码如下。我的想法是将一个类a的对象NewObject添加到一个列表add中,同时执行在a类中定义的某种测试比较 我是C++初学者,所以我

谁能解释一下我为什么会出现以下错误

A.cpp: In member function ‘void A::NewObject(int)’:
A.cpp:11: error: ‘list_a’ was not declared in this scope
我试着在不同的地方申报清单。现在它在prog.cpp中,在main中。我不明白为什么它不在范围内

我的简化代码如下。我的想法是将一个类a的对象NewObject添加到一个列表add中,同时执行在a类中定义的某种测试比较

我是C++初学者,所以我特别喜欢详细的答案。提前谢谢。 以下是文件:

//A.h

#ifndef A_H
#define A_H

class A
{
private:
    int id;
    int Compare(int, int);
public:
    A()
    {
        id = 0;
    }
    A(int i)
    {
        id = i;
    }
    void NewObject(int i);
};
#endif

//A.cpp

#include "A.h"
#include "List.h"

void A::NewObject(int i)
{   
    list_a->Add(i);
}

int A::Compare(int a, int b)
{
    if ( a>b ) return 1;
    if ( a<b ) return -1;
    else return 0;
}


//List.h

#ifndef LIST_H
#define LIST_H

template<typename T>
class Node
{
public:
    T* dana;
    Node *nxt, *pre;
    Node()
    {
        nxt = pre = 0;
    }
    Node(const T el, Node *n = 0, Node *p = 0 )
    {
        dana = el; nxt = n; pre = p;
    }
};

template<typename T, typename U>
class List
{
public:
    List()
    {
        head = tail = 0;
    }
    void Add(const U);
protected:
    Node<T> *head,*tail;
};

#endif


//List.cpp

#include <iostream>
#include "List.h"

template<typename T, typename U>
void List<T,U>::Add(const U el)
{
    int i = 5;
    Node<T> *hlp = new Node<T>();
    head = hlp;
    if ( Compare(el,i) > i )
        std::cout << "Ok" << std::endl;
}

//prog.cpp
#include "List.h"
#include "A.h"

int main()
{
    int i = 5;
    List<class A, int> *list_a = new List<class A, int>();
    A obj;

    obj.NewObject(i);
}

答案很简单:您从未在类a中声明过名为list_a的变量,仅此而已

这样做:

class A
{
private:
    List <int> list_a;
    int id;
    int Compare(int, int);
public:
    A()
    {
        id = 0;
    }
    A(int i)
    {
        id = i;
    }
    void NewObject(int i);
};

从列表类中删除U模板参数

发生此类错误时,主函数中的类名可能不匹配。检查它们是否相同。只有这样,您才会在此范围内得到一个错误,如not declared(未声明),这意味着它们没有正确声明。

我必须再次检查以确保在该范围内。是的,它在main的范围内。第11行的范围是该功能的局部范围;函数不共享局部变量。记住main和其他函数一样,它只是第一个被调用的函数,现在它在prog.cpp中,在main中。但我试着在A.cpp中声明,但它也不起作用。它应该是什么样子?我应该把它放在哪里?是的,但它是从类A访问的,因此语言希望它在类A的范围内。它从来没有在该范围内定义过,所以它不在范围内。这就是隐藏bla的全部信息所涉及的……例如,作为a的成员,或者您可以将其作为引用/指针参数传递给a::NewObject