gpt4 book ai didi

c++ - .h和.cpp文件分离时出错,但仅使用.h文件则没有错误。我究竟做错了什么?

转载 作者:行者123 更新时间:2023-12-02 10:29:42 25 4
gpt4 key购买 nike

我是C++新手,所以如果我的疑问似乎太琐碎,请对我轻松一点。

#pragma once

class cube
{
public:
double getVolume();
double getSA();
void setLength(double length);

private:
double length_;
};
这是我的头文件cube.h ^^^
#include "cube.h"

double cube::getVolume()
{
return length_ * length_ * length_;
}

double cube::getSA()
{
return 6 * length_ * length_;
}

void cube::setLength(double length)
{
length_ = length;
}
这是cube.cpp,下一个是main.cpp
#include "cube.h"
#include <iostream>
int main()
{

cube c;

c.setLength(3.48);
double vol = c.getVolume();
std::cout << "Vol: " << vol;

return 0;
}
问题1:因此,当我在不使用.cpp的情况下将实现包含在.h文件本身中时,代码将按预期运行。但是,当我分离.h和.cpp文件时,出现一条错误消息:“对 cube::setLength(double)', 'undefined reference to cube::getVolume()的 undefined reference ”和“在0.47秒内以code = 1退出”。
我在VS Code上运行它并进行设置,然后运行了一个简单的cin / cout和一个hello world程序。我对代码本身做错了吗,还是由于VS Code而导致的错误?请注意,仅当我分离.h和.cpp文件时,才会出现此问题。
问题2:为什么还要分开.h和.cpp文件?
编辑1:正如@KamilCuk指出的那样,问题可能出在链接main.cpp和cube.cpp文件上,但是我不知道如何“链接” cpp文件进行编译?
编辑2:我可能会以错误的方式进行编译。我通常只单击右上角启用了代码运行器的运行按钮,但是我不知道如何一次编译两个文件。

最佳答案

尝试这样做。这为我工作,并给出了预期的结果:

g++ main.cpp cube.cpp -I./ -o cube.out


您也可以在内联.h文件中实现,并使代码正常工作。但是对于更复杂的类,最好将.cpp和.h中的实现分开
将头文件保护为多个定义也是一个好习惯:
#ifndef _CUBE_H_
#define _CUBE_H_

class Cube
{
public:
double getVolume();
double getSA();
void setLength(double length);

private:
double length_;
};

#endif //_CUBE_H_
以下链接提供了有关如何使用VSCode构建多个C++文件的详细信息。
https://dev.to/talhabalaj/setup-visual-studio-code-for-multi-file-c-projects-1jpi

关于c++ - .h和.cpp文件分离时出错,但仅使用.h文件则没有错误。我究竟做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62740465/

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