c++ - 如何在 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++ 文件中定义一次。您不想class Vector2 {
在 C++ 文件中进行操作。你的函数应该是这样的
Vector2 Vector2::operator+(Vector2 vec) {
return Vector2(x + vec.x, y + vec.y);
}
并且应该在 C++ 文件的顶级范围内定义。
推荐阅读
- aggregation-framework - 条件聚合阶段
- spring-boot - corda 中的世界状态是什么,就像超级账本结构中的世界状态是账本的快照
- neo4j - Neo4j SDN - OGM 节点平等
- r - 即使是随机数据,在 gam() 和 glmmTMB() 中包含 weights 参数也会产生显着的 p 值
- asp.net-core - 将大型 (40MB) MultipartFormDataContent 发布到 ASP.NET Core 3.1 返回 413 - RequestEntityTooLarge
- mysql - 如何恢复 MYSQL .dump 文件?
- bash - bash:在 if 表达式中使用时,`set -e` 不起作用?
- encoding - 运行 Tensorflow2 升级脚本会触发编码错误
- python - Modelchoicefield保存在数据库django中
- python-3.x - 在循环内的字典中添加相同键的值