首页 > 解决方案 > 如何在 C++ 中使用标头中的类

问题描述

所以我对 c++ 很陌生,我正在尝试测试它具有的简单功能。我目前有一个问题,即有一个“类”类型的重新定义,我不知道为什么。我在头文件中使用过一次#pregama,但仍然如此。我什至尝试过#ifndef 和#define,但它们也不起作用。如果与此有关,我正在使用 Visual Studio 2019 社区。

主文件

#include <iostream>
#include "Vectors.h"

using namespace std;

int main() {
    double distance = Vector2::Zero().Distance(Vector2(1, 1));
    cout << distance;

    return 0;
}

Vector2.cpp

#include "Vectors.h"
#include <cmath>

class Vector2 {
public:
    double x;
    double y;

    Vector2(double x, double y) {
        this->x = x;
        this->y = y;
    }

    static Vector2 Zero() {
        return Vector2(0, 0);
    }
    static Vector2 One() {
        return Vector2(1, 1);
    }
    double Distance(Vector2 other) {
        Vector2 relPos = this->operator-(other);
        relPos.x = abs(relPos.x);
        relPos.y = abs(relPos.y);

        return sqrt(pow(relPos.x, 2) + pow(relPos.y, 2));
    }

    Vector2 operator + (Vector2 vec) {
        return Vector2(x + vec.x, y + vec.y);
    }
    Vector2 operator - (Vector2 vec) {
        return Vector2(x - vec.x, y - vec.y);
    }
    Vector2 operator * (Vector2 vec) {
        return Vector2(x * vec.x, y * vec.y);
    }
    Vector2 operator / (Vector2 vec) {
        return Vector2(x / vec.x, y / vec.y);
    }
};

向量.h

#pragma once

class Vector2 {
public:
    Vector2(double x, double y);

    static Vector2 Zero();
    static Vector2 One();
    double Distance(Vector2 other);
    Vector2 operator + (Vector2 vec);
    Vector2 operator - (Vector2 vec);
    Vector2 operator * (Vector2 vec);
    Vector2 operator / (Vector2 vec);
};

标签: c++visual-studio-2019

解决方案


您在标头中定义类一次,在 C++ 文件中定义一次。您不想class Vector2 {在 C++ 文件中进行操作。你的函数应该是这样的

Vector2 Vector2::operator+(Vector2 vec) {
  return Vector2(x + vec.x, y + vec.y);
}

并且应该在 C++ 文件的顶级范围内定义。


推荐阅读