【问题标题】:how to pass a constructor parameter of a class in a different class main in C++如何在C ++中的不同类main中传递类的构造函数参数
【发布时间】:2012-02-23 03:31:30
【问题描述】:

//Class1 主目录

int main()
{
    ...

    Class1 obj1(parameters);
    Class1 obj2(parameters);    
    Class1 *Array[2];
    Array[0] = obj1;
    Array[1] = obj2;

    Class1 *Pointer = Array;

    Class2 repository(Pointer);   //where the error occurs.
}

obj1 和 obj2 是之前创建的并且是 class1 对象。 class2 是一个数据存储库类 (Class2) 我正在尝试将数组传递给它以从 Class2 指向它。

#include "Class2.h"
//what Class2 constructor looks like.

Class2::Class2(Class1* Pointer)
{
    tPointer = Pointer;
}

问题是我收到一条错误消息 Undefined symbols: "Class2::Class2(Class1*)", referenced from: _main in Class1 ld: symbol(s) not found

任何帮助将不胜感激。

【问题讨论】:

  • @biz 您是否正在构建具有Class2 定义的源文件?
  • @Mahesh 是的,我正在尝试在 class1 main() 中构建它,但它不会让我
  • 正如@Mahesh 所说,确保正在编译具有Class2 实现的源文件。

标签: c++ class


【解决方案1】:

你有很多错误,我会试着告诉你如何解决它们。

int main()
{
    ...

   Class1 obj1(parameters);
   Class1 obj2(parameters);    
   Class1 *Array[2];
   Array[0] = &obj1; // Array holds pointers to Class1, so you need to use &
   Array[1] = &obj2; // Here too.

   Class1 *Pointer = Array[0]; // Use Array[0] or Array[1] here

   Class2 repository(Pointer);   //Should be okay now
}

总结:

Array[0] = obj1; 行中,您忘记了地址运算符(下一行相同)。

Class1 *Pointer = Array; 行没有意义,因为 Array 本身就是一个指向指针的指针,您希望 Array[0]Array[1] 使指针指向 obj1 或 obj2。

【讨论】:

  • @jozefg:我不确定我是否理解您的评论。你的意思是Class1 **Pointer = Array;Class2 repository(*Pointer);
  • 那么Class1 **Pointer = Array; 不应该是有效的吗?毕竟 Array 确实包含一个指向 Class1 指针的指针。
  • @jozefg:是的,它是有效的。但是,在您的第一条评论中,您说i believe Class1 *Pointer = Array; is valid,事实并非如此。
  • 哦,对不起,错字,请让我改正。
  • 我仍然得到同样的错误是因为我滥用了继承吗? Class2 是否必须从 Class1 继承?
【解决方案2】:

好吧,有几件事:

1) 数组不是 Class1* 的类型,它是 Class1**
2)您正在制作一个指针数组, obj1 和 obj2 目前不是指针!要么动态分配它们,要么使用 & 运算符来获取地址。
3) 这是一个建议:如果可能,请使用 std::vector。使用指针数组可能会很痛苦,而且很快就会变得一团糟。
但如果你坚持,那就继续吧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 2012-09-11
    • 2015-10-11
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多