如何在c ++中的类中声明和使用另一个类的对象

时间:2015-03-27 09:21:19

标签: c++ class

我是编程的初学者。 我编写了两个类(具有需要传递参数的构造函数)并且想要在另一个类中声明和使用一个类的对象。

我试图在许多网站上找到我的错误的解决方案,但它们都没有奏效。我还看到了使用' '解决此问题的方法。句法。 请提出一些(任何)方法来解决这个问题。

类似于我遇到问题的短程序如下: (我知道这个程序很愚蠢但是,这不是我面临问题的实际程序。相反,这是我正面临错误的程序部分的缩小版本)

错误在Class2.h和main.cpp

的main.cpp

#include <iostream>
#include "Class2.h"
using namespace std;

int main()
{
   Class2 Class2_Obj;
   Class2_Obj.Class2_Function(); // error: undefined reference to `Class2::Class2_Function

   return 0;
}

Class1.h

#ifndef CLASS1_H_INCLUDED
#define CLASS1_H_INCLUDED

class Class1
{
   private:
   const int c1_Variable;

   public:
   Class1(int);

   // Displays the value of c1_Variable on output screan
   void Class1_Function();
};

#endif // CLASS1_H_INCLUDED

Class1.cpp

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

Class1::Class1(int receivedInt) : c1_Variable(receivedInt) {}

void Class1::Class1_Function()
{
   cout << c1_Variable;
}

Class2.h

#ifndef CLASS2_H_INCLUDED
#define CLASS2_H_INCLUDED


#include"Class1.h"

class Class2
{
   private:
   Class1 Class1_Obj(4); // 4 is just a random number.
                         //error: expected identifier before numeric constant
                         //error: expected ',' or '...' before numeric constant

   public:
   // Calls Class1_Function()
   void Class2_Function();
};

#endif // CLASS2_H_INCLUDED

Class2.cpp

#include <iostream>
#include "Class1.h"
#include "Class2.h"

void Class::Class2_Function()
{
   Class1_Obj.Class1_Function();
}

以下是错误快照的链接:

Class2.h中的错误的屏幕截图 - http://i.stack.imgur.com/WpK9k.jpg
main.cpp中的错误屏幕截图 - http://i.stack.imgur.com/yDBD7.jpg

  

请帮帮我!提前感谢任何回复:)

2 个答案:

答案 0 :(得分:1)

问题是这种非静态数据成员语法的就地初始化无效:

class Class2
{
private:
   Class1 Class1_Obj(4);
   ....
};

您可以改用{}

class Class2
{
private:
  Class1 Class1_Obj{4};
  ....
};

或此表格

class Class2
{
private:
  Class1 Class1_Obj = Class1(4);
  ....
};

答案 1 :(得分:0)

C ++是一种面向对象的语言。它有用于构建数据的类。

要将一个班级放入另一个班级,您可以an object of one class a member of another class

从语法上讲,它就像

一样
class A {
   int x;
   public:
   A (int x1) : x(x1) {}
};

class B {
   A a; // this is how you do it ..
   public:
   B() : A(4) {}
};

B b; // b is an object which has a member b.a

如您所见,b是类B的对象。它有a个成员A