Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Netbeans:C++;生成成功,运行失败_C++_Vector_Netbeans - Fatal编程技术网

C++ Netbeans:C++;生成成功,运行失败

C++ Netbeans:C++;生成成功,运行失败,c++,vector,netbeans,C++,Vector,Netbeans,更新/解决方案:这似乎是Netbeans的问题,而不是我的代码。我将NetBeans转换为代码块,并使用另一个编译器,它就可以工作了 我现在正试图用C++编写我自己的向量类。为此,我仍然使用内置向量,但我想定义自己的操作符。我的问题是构建我的项目是可行的(“构建成功”),但当我尝试运行我的项目时,控制台中只会显示“运行失败”。我不知道是什么原因导致了这个错误,互联网还没有提供解决方案。我正在Windows 10上使用NetBeans Apache。这是我的密码: Vector.hh #ifnde

更新/解决方案:这似乎是Netbeans的问题,而不是我的代码。我将NetBeans转换为代码块,并使用另一个编译器,它就可以工作了

我现在正试图用C++编写我自己的向量类。为此,我仍然使用内置向量,但我想定义自己的操作符。我的问题是构建我的项目是可行的(“构建成功”),但当我尝试运行我的项目时,控制台中只会显示“运行失败”。我不知道是什么原因导致了这个错误,互联网还没有提供解决方案。我正在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 */
#ifndef向量
#定义向量
#包括
使用名称空间std;
类向量{
公众:
向量();
~Vector();
向量(常数向量&);
向量(int d,双v);
向量(int-d);
向量和运算符=(常量向量&);
双精度&运算符[](常数int);
双运算符[](常量int)常量;
向量和运算符+(常量向量和);
向量与运算符-(常数向量&);
向量和运算符*(常数双精度);
双算子*(常数向量&);
双范数();
友元向量和运算符*(常数双精度,向量和v);
私人:
整数维;
向量*值;
};
#endif/*向量*/
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;
}
#包括“Vector.hh”
#包括
#包括
使用名称空间std;
向量::向量():维度(0){
值=新向量();
}
向量::~Vector(){
维度=0;
删除值;
}
向量::向量(常量向量&v):维度(v.dimension){
值=新向量();
对于(int i=0;i推回(v[i]);
}
}
向量::向量(整数d,双v):维数(d){
值=新向量();
值->分配(尺寸,v);
}
向量::向量(int d):维度(d){
值=新向量();
值->分配(维度,0);
}
向量和向量::运算符=(常量向量和v){
尺寸=v.尺寸;
删除值;
值=新向量();
对于(int i=0;i推回(v[i]);
}
归还*这个;
}
向量和向量::运算符*(双s){
矢量*v=新矢量(尺寸);
对于(int i=0;i在(i)处;
}
返回*v;
}
double&Vector::运算符[](常量int i){
返回值->at(i);
}
双向量::运算符[](常量int i)常量{
返回值->at(i);
}
向量和向量::运算符+(常量向量和v){
矢量*u=新矢量(维数);
对于(int i=0;i在(i)处;
}
返回*u;
}
向量和向量::运算符-(常量向量和v){
矢量*u=新矢量(维数);
对于(int i=0;i在(i)处;
}
返回*u;
}
双向量::运算符*(常量向量和v){
双d=0;
如果(v.dimension!=维度)返回0;
对于(int i=0;i在(i)处;
}
返回d;
}
双向量::范数(){
双d=(*此)*(*此);
返回sqrt(d);
}
向量和运算符*(常数双s,向量和v){
返回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;
}
#包括
#包括“Vector.hh”
#包括
使用名称空间std;
/*
* 
*/
int main(int argc,字符**argv){

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

NetBeans有内置调试功能吗?我不熟悉它,所以我自己也不知道。我标记了NetBeans,因为这可能与代码和项目设置无关。代码在Visual Studio 2019中运行正常,所以这一定是NetBeans的问题。是吗您可以选择清理和重建项目?为什么
是指针?您不应该使用
new
太多–内存泄漏太多。您可以不使用它一次就实现它。