gpt4 book ai didi

c++ - 关于 C++ 包含另一个类

转载 作者:IT老高 更新时间:2023-10-28 22:15:50 27 4
gpt4 key购买 nike

我有两个文件:

File1.cpp
File2.cpp

File1 是我的主类,它有 main 方法,File2.cpp 有一个类调用 ClassTwo,我想在我的 File1.cpp 中创建一个 ClassTwo 的对象

我将它们编译在一起

g++ -o myfile File1.cpp File2.cpp

但是当我尝试创建时

//创建二类对象

ClassTwo ctwo;

它不起作用。

错误是

ClassTwo 未在此范围内声明。

这是我的 main.cpp

#include <iostream>
#include <string>
using namespace std;

int main()
{
//here compile error - undeclare ClassTwo in scope.
ClassTwo ctwo;

//some codes
}

这是我的 File2.cpp

#include <iostream>
#include <string>

using namespace std;

class ClassTwo
{
private:
string myType;
public:
void setType(string);
string getType();
};


void ClassTwo::setType(string sType)
{
myType = sType;
}

void ClassTwo::getType(float fVal)
{
return myType;
}

响应将我的 File2.cpp 拆分为另一个 .h 文件,但如果我声明一个类,我如何将其拆分为另一个 .h 文件,因为我需要维护变量的公共(public)和私有(private)(私有(private))和函数(公共(public))以及如何在主要方法中将 ClassTwo ctwo 获取到我的 File1.cpp

最佳答案

What is the basic problem in your code?

您的代码需要分成接口(interface)(.h)和实现(.cpp)。
当您编写类似的内容时,编译器需要查看类型的组成

ClassTwo obj;

这是因为编译器需要为 ClassTwo 类型的对象保留足够的内存才能这样做,它需要查看 ClassTwo 的定义。在 C++ 中执行此操作的最常见方法是将代码拆分为头文件和源文件。
类定义放在头文件中,而类的实现放在源文件中。这样,人们可以轻松地将头文件包含到其他需要查看他们创建的对象的类的定义的源文件中。

Why can't I simply put all code in cpp files and include them in other files?

您不能简单地将所有代码放在源文件中,然后将该源文件包含在其他文件中。C++ 标准要求您可以根据需要多次声明实体,但只能定义一次( One Definition Rule(ODR) )。包含源文件会违反 ODR,因为在包含该文件的每个 translation unit 中都会创建实体的拷贝。

How to solve this particular problem?

您的代码应按如下方式组织:

//文件1.h

Define ClassOne 

//文件2.h

#include <iostream>
#include <string>


class ClassTwo
{
private:
string myType;
public:
void setType(string);
std::string getType();
};

//File1.cpp

#include"File1.h"

Implementation of ClassOne

//File2.cpp

#include"File2.h"

void ClassTwo::setType(std::string sType)
{
myType = sType;
}

void ClassTwo::getType(float fVal)
{
return myType;
}

//main.cpp

#include <iostream>
#include <string>
#include "file1.h"
#include "file2.h"
using namespace std;

int main()
{

ClassOne cone;
ClassTwo ctwo;

//some codes
}

Is there any alternative means rather than including header files?

如果您的代码只需要创建指针而不是实际对象,您不妨使用 Forward Declarations 但请注意,使用前向声明会添加 some restrictions on how that type can be used 因为编译器将该类型视为类型不完整

关于c++ - 关于 C++ 包含另一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12733888/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com