gpt4 book ai didi

c++ - 当实现完全在我的 .HPP 文件中时,编译器正在寻找 .CPP 文件

转载 作者:行者123 更新时间:2023-11-30 04:42:03 30 4
gpt4 key购买 nike

看起来我的编译器正在寻找与我的 rectangle.h 文件对应的 CPP 文件。我在 .h 文件中有我的整个实现,我不想制作一个 CPP 文件来对应。结果,我的编译器抛出以下错误:

/usr/bin/ld: /tmp/ccywfYT2.o: in function `Sprite::Sprite()':
main.cpp:(.text+0x8a2): undefined reference to `Rectangle::Rectangle()'
/usr/bin/ld: /tmp/ccywfYT2.o: in function
`Sprite::Sprite(Graphics&, std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, int, int, int, int, float, float)':
main.cpp:(.text+0x919): undefined reference to `Rectangle::Rectangle()'
collect2: error: ld returned 1 exit status

例如,我在 rectangle.h 中有我的 Rectangle 类

#ifndef RECTANGLE_H
#define RECTANGLE_H

#include "globals.h"

class Rectangle {
private:

int _x, _y, _width, _height;

public:

Rectangle();
Rectangle(int x, int y, int width, int height) : _x(x), _y(y), _width(width), _height(height)
{};

const int inline getCenterX() const {return this->_x + this->_width / 2;};
const int inline getCenterY() const {return this->_y + this->_height / 2;};

const int inline getLeft() const {return this->_x;};
const int inline getRight() const {return this->_x + this->_width;};
const int inline getTop() const {return this->_y;};
const int inline getBottom() const {return this->_y + this->_height;};

const int inline getWidth() const {return this->_width;};
const int inline getHeight() const {return this->_height;};

const int inline getSide(const ourSides::Side side) const {
return side == ourSides::TOP ? this->getBottom() :
side == ourSides::BOTTOM ? this->getTop() :
side == ourSides::LEFT ? this->getRight() :
side == ourSides::RIGHT ? this->getLeft() :
ourSides::NONE;
}

/* bool collidesWith
* Takes in another rectangle and checks if the two are colliding.
* Will be applied to Quote as he moves around. (Quote is in a rectangle)
*/

const bool inline collidesWith(const Rectangle& otherRect) const {
return
this->getRight() >= otherRect.getLeft() &&
this->getLeft() <= otherRect.getRight() &&
this->getTop() <= otherRect.getBottom() &&
this->getBottom() >= otherRect.getTop();
}

const bool inline isValidRectangle() const {
return this->_x >= 0 && this->_y >= 0 && this->_width >= 0 && this->_height >= 0;
}

};

#endif // RECTANGLE_H

如果这甚至是我的问题,我怎样才能让我的程序在不需要随附的 CPP 文件的情况下进行编译。

最佳答案

您实际上并没有实现 Rectangle()。你在它后面放一个 ; ,这使它成为一个声明。

如果您打算使构造函数为空,请改用 Rectangle() = default;——除非您使用的是一个非常老的编译器,由于某种原因不支持它。然后使用 {} 代替 ;

关于c++ - 当实现完全在我的 .HPP 文件中时,编译器正在寻找 .CPP 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58944400/

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