【发布时间】:2020-08-08 22:59:23
【问题描述】:
我有两个类定义,Class1 和 Class2。我需要创建 Class1 的实例,然后将该实例存储在 Class2 的实例中,以便可以从 Class2 实例中访问 Class1 实例。我对 C++ 很陌生,似乎无法做到这一点。
这是我的代码:
main.cpp
#include <iostream>
#include "class_1.h";
#include "class_2.h";
using namespace std;
int main()
{
cout << "Creating class 1..." << endl;
// create class1, seems to work fine
Class1 class1(5);
cout << "Passing class 1 to class 2..." << endl;
// i want to create class2, and pass the class1 instance of Class1
// so it can be stored and accessed by Class2
Class2 class2(class1);
return 0;
}
class_1.h
class Class1
{
private:
public:
// some variable we can store and access
int this_x;
// constructor
Class1(int x);
};
class_1.cpp
#include "class_1.h"
// in the constructor set value of this_x to x
Class1::Class1(int x)
{
this_x = x;
}
class_2.h
#include "class_1.h"
class Class2
{
private:
// declare the variable that I want to store Class1 in
Class1 stored_class;
public:
// constructor, will receive a Class1 object instance
Class2(Class1 store_class_1);
};
class_2.cpp
#include "class_2.h"
// constructor for Class2, takes a Class1 object
Class2::Class2(Class1 storeClass1)
{
// i want to store storeClass1,
// but havent got that far yet
int y = 3;
}
我在文件“class_2.cpp”中遇到错误:
Class2::Class2(Class1 storeClass1)
编译器说
||=== 构建:在链接对象中调试(编译器:GNU GCC 编译器)===| C:\Users\Geoff\Desktop\Py Projects\link_objects\class_2.cpp||在构造函数 'Class2::Class2(Class1)':| C:\Users\Geoff\Desktop\Py Projects\link_objects\class_2.cpp|7|error: no matching function for call to 'Class1::Class1()'| C:\Users\Geoff\Desktop\Py Projects\link_objects\class_1.h|18|注意:候选:'Class1::Class1(int)'| C:\Users\Geoff\Desktop\Py Projects\link_objects\class_1.h|18|注意:候选人需要 1 个参数,提供 0 个| C:\Users\Geoff\Desktop\Py Projects\link_objects\class_1.h|7|注意:候选:'constexpr Class1::Class1(const Class1&)'| C:\Users\Geoff\Desktop\Py Projects\link_objects\class_1.h|7|注意:候选人需要 1 个参数,0 提供| C:\Users\Geoff\Desktop\Py Projects\link_objects\class_1.h|7|注意:候选:'constexpr Class1::Class1(Class1&&)'| C:\Users\Geoff\Desktop\Py Projects\link_objects\class_1.h|7|注意:候选人需要 1 个参数,0 提供| C:\Users\Geoff\Desktop\Py Projects\link_objects\class_2.cpp|13|警告:未使用的变量 'y' [-Wunused-variable]| C:\Users\Geoff\Desktop\Py Projects\link_objects\main.cpp|3|警告:#include 指令末尾的额外标记| C:\Users\Geoff\Desktop\Py Projects\link_objects\main.cpp|4|警告:#include 指令末尾的额外标记| C:\Users\Geoff\Desktop\Py Projects\link_objects\class_1.h|7|错误:'class Class1'的重新定义| C:\Users\Geoff\Desktop\Py Projects\link_objects\class_1.h|7|注意:'class Class1'的先前定义| ||=== 构建失败:2 个错误,3 个警告(0 分钟,0 秒)===|
我对 C++ 很陌生,我很确定我做的一切都错了......我认为如果我试图将一个结构存储在另一个结构中,我正在做的事情可能会奏效,但是我不明白我做错了什么任何帮助感谢感谢
编辑
感谢您的帮助,我现在似乎可以通过添加标头保护并在 Class2 构造函数中设置 stored_class 属性来使其正常工作。我还想通过 ref 传递,这样我就可以从 class2 中更改 class1。代码如下所示:
main.cpp
#include <iostream>
#include "class_1.h";
#include "class_2.h";
using namespace std;
int main()
{
cout << "Creating class 1..." << endl;
// create class1, seems to work fine
Class1 class1(5);
cout << "Passing class 1 to class 2..." << endl;
// i want to create class2, and pass the class1 instance of Class1
// so it can be stored and accessed by Class2
Class2 class2(class1);
cout << "Class 1 this_x from Class 2=" << class2.stored_class.this_x << endl;
class1.this_x = 4;
cout << "Class 1 this_x from Class 2=" << class2.stored_class.this_x << endl;
return 0;
}
class_1.h
#ifndef CLASS_1_H_INCLUDED
#define CLASS_1_H_INCLUDED
class Class1
{
private:
public:
// some variable we can store and access
int this_x;
// constructor
Class1(int x);
};
#endif // CLASS_1_H_INCLUDED
class_1.cpp
#include "class_1.h"
// in the constructor set value of this_x to x
Class1::Class1(int x)
{
this_x = x;
}
class_2.h
#ifndef CLASS_2_H_INCLUDED
#define CLASS_2_H_INCLUDED
#include "class_1.h"
class Class2
{
private:
public:
// constructor, will receive a Class1 object instance
Class2(Class1 &store_class_1);
// declare the variable that I want to store Class1 in
Class1 &stored_class;
};
#endif // CLASS_2_H_INCLUDED
class_2.cpp
#include "class_2.h"
// constructor for Class2, takes a Class1 object
Class2::Class2(Class1 &storeClass1): stored_class(storeClass1) {}
问题:
根据此处https://www.w3schools.com/cpp/cpp_constructors.asp 的示例,他们使用不同样式的代码来设置成员变量。当我在 class_2.cpp 中尝试这个时,怎么会出错?我认为这种格式会更好,所以我可以在 Class2 构造函数中做更多的事情?
Class2::Class2(Class1 &storeClass1) {
stored_class = storeClass1;
}
【问题讨论】:
-
1) 将include guards 添加到您的标题中。 2) 初始化构造函数初始化列表中的成员,如
Class2::Class2(Class1 storeClass1) : stored_class(storeClass1) {...}
标签: c++