在不同的cpp文件中使用类对象

时间:2014-08-22 17:10:21

标签: c++ class

我开始学习在不同的.cpp文件中使用类对象..

我做了什么:

  1. 在一个文件中创建一个节点类并使用node.h保存它
  2. 创建了另一个名为node_pair.cpp且包含node.h
  3. 的文件
  4. 创建了一个名为pair()的函数,并从main()
  5. 调用它

    现在,我想问两件事:

    1. 我正在error: reference to ‘pair’ is ambiguous
    2. 这是node.h文件的代码

      #include "iostream"
      #include"stdlib"
      using namespace std;
      
      class node
      {
          int data;
      public:
          node *next;
          int insert(node*);
          node* create();
          int display(node *);
      } *start = NULL, *front, *ptr, n;
      
      int node::insert(node* np)
      {
          if (start == NULL)
          {
              start = np;
              front = np;
          }
          else
          {
              front->next = np;
              front = np;
          }
          return 0;
      }
      
      node* node::create()
      {
          node *np;
          np = (node*)malloc(sizeof(node)) ;
          cin >> np->data;
          np->next = NULL;
          return np;
      }
      
      int node::display(node* np)
      {
          while (np != NULL)
          {
              cout << np->data;
              np = np->next;
          }
          return 0;
      }
      
      int main_node()
      {
          int ch;
          cout << "enter the size of the link list:";
          cin >> ch;
          while (ch--)
          {   
              ptr = n.create();
              n.insert(ptr);
          }
          n.display(start);
          cout << "\n";
          return 0;
      }
      

      这是node_pair.cpp的代码

      #include"iostream"
      #include"node.h"
      using namespace std;
      
      node obj;
      
      int pair()
      {
          node* one, *two, *save;
          one = start;
          two = start->next;
          while (two != NULL)
          {
              save = two->next;
              two->next = one;
              one->next = save;
          } 
      }
      
      int main()
      {
          main_node();
          pair();
          obj.display(start);
          return 0;
      }
      

      我该怎么做才能解决此错误

      现在是第二个问题

      2.我希望node* next指针在节点类中保持私有,但如果我这样做,那么我将无法在pair()函数中访问它。

      请提前回复,谢谢。

2 个答案:

答案 0 :(得分:2)

一些提示:

  • 您的功能组与std::pair冲突。
  • 不要使用using namespace std;。这是一个不好的做法,并造成这样的错误。
  • 混合node.js和C ++是一个高级主题。如果你刚开始学习OOP,我建议你坚持使用纯C ++。

答案 1 :(得分:0)

您与pair()std::pair发生了名称冲突。

最佳做法是避免using整个namespace std - 只需使用您需要的内容。例如,如果您只需要std::cin,则可以使用using std::cin;将其添加到全局命名空间,而不是std::pair。您也可以将cin的所有实例替换为std::cin

如果你真的想要使用整个namespace std,你也可以创建自己的namespace来放入你的代码 - 特别是你需要把你的pair()放进去这个新命名空间。你这样做:

namespace mynamespace {
  int pair() {
    // ...
  }

// ... other code in mynamespace
} // end mynamespace