【问题标题】:Netbeans: C++ Successful Build, Run FailedNetbeans:C++ 成功构建,运行失败
【发布时间】: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——你有很多内存泄漏。你甚至可以不使用它来实现它。

标签: c++ vector netbeans


【解决方案1】:

我无法使用 NetBeans 解决问题,但切换到另一个 IDE 和编译器(在我的例子中是 CodeBlocks)有所帮助,现在代码可以无缝运行。

【讨论】:

    猜你喜欢
    • 2017-02-25
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 2019-04-06
    • 2018-03-11
    • 2011-10-02
    • 2020-11-01
    相关资源
    最近更新 更多