【发布时间】:2020-02-29 16:44:49
【问题描述】:
更新/解决方案:这似乎是 Netbeans 的问题,而不是我的代码。我从 NetBeans 切换到 CodeBlocks 并使用另一个编译器,它可以工作。
目前我正在尝试用 C++ 编写自己的 Vector 类。为此,我仍在使用内置向量,但我想定义自己的运算符。我的问题是构建我的项目有效(“构建成功”),但是当我尝试运行我的项目时,它只是在控制台中显示“运行失败”。我不知道是什么导致了这个错误,互联网还没有提供解决方案。我在 Windows 10 上使用 NetBeans Apache。这是我的代码:
Vector.hh
#ifndef VECTOR_HH
#define VECTOR_HH
#include <vector>
using namespace std;
class Vector{
public:
Vector();
~Vector();
Vector(const Vector&);
Vector(int d, double v);
Vector(int d);
Vector& operator=(const Vector&);
double& operator[](const int);
double operator[](const int) const;
Vector& operator+(const Vector&);
Vector& operator-(const Vector&);
Vector& operator*(const double);
double operator*(const Vector&);
double norm();
friend Vector& operator*(const double, Vector& v);
private:
int dimension;
vector<double>* values;
};
#endif /* VECTOR_HH */
Vector.cc
#include "Vector.hh"
#include <math.h>
#include <vector>
using namespace std;
Vector::Vector():dimension(0){
values = new vector<double>();
}
Vector::~Vector(){
dimension = 0;
delete values;
}
Vector::Vector(const Vector& v):dimension(v.dimension){
values = new vector<double>();
for(int i = 0; i < dimension; i++){
values->push_back(v[i]);
}
}
Vector::Vector(int d, double v):dimension(d){
values = new vector<double>();
values->assign(dimension, v);
}
Vector::Vector(int d):dimension(d){
values = new vector<double>();
values->assign(dimension, 0);
}
Vector& Vector::operator=(const Vector& v){
dimension = v.dimension;
delete values;
values = new vector<double>();
for(int i = 0; i < dimension; i++){
values->push_back(v[i]);
}
return *this;
}
Vector& Vector::operator*(double s){
Vector* v = new Vector(dimension);
for(int i = 0; i < dimension; i++){
(*v)[i] = s * values->at(i);
}
return *v;
}
double& Vector::operator[](const int i){
return values->at(i);
}
double Vector::operator[](const int i) const{
return values->at(i);
}
Vector& Vector::operator+(const Vector& v){
Vector* u = new Vector(dimension);
for(int i = 0; i < dimension; i++){
(*u)[i] = v[i] + values->at(i);
}
return *u;
}
Vector& Vector::operator-(const Vector& v){
Vector* u = new Vector(dimension);
for(int i = 0; i < dimension; i++){
(*u)[i] = v[i] - values->at(i);
}
return *u;
}
double Vector::operator*(const Vector& v){
double d = 0;
if(v.dimension != dimension) return 0;
for(int i = 0; i < dimension; i++){
d = d + v[i] * values->at(i);
}
return d;
}
double Vector::norm(){
double d = (*this) * (*this);
return sqrt(d);
}
Vector& operator*(const double s, Vector& v){
return v * s;
}
Main.cpp
#include <cstdlib>
#include "Vector.hh"
#include <iostream>
using namespace std;
/*
*
*/
int main(int argc, char** argv) {
std::cout << "Hello there";
Vector v(2);
v[0] = 3;
v[1] = -4;
Vector u(2);
return 0;
}
感谢您的帮助:)
【问题讨论】:
-
NetBeans 是否具有内置调试功能?我不熟悉它,所以我自己也不知道。
-
我标记为 NetBeans,因为这可能与代码无关,而与项目设置有关。
-
代码在 Visual Studio 2019 中运行正常,所以它一定是 Netbeans 问题。您可以选择清理和重建项目吗?
-
为什么
values是一个指针? -
你不应该经常使用
new——你有很多内存泄漏。你甚至可以不使用它来实现它。