Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.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++ &引用;“类型”;不引用C+上的值+;_C++_Pointers_Openframeworks - Fatal编程技术网

C++ &引用;“类型”;不引用C+上的值+;

C++ &引用;“类型”;不引用C+上的值+;,c++,pointers,openframeworks,C++,Pointers,Openframeworks,我在OpenFrameworks artwork上遇到了这个错误。但是看起来是一个简单的C++问题。 ofVec2f does not refer to a value 当然,我在指针方面有问题,但我不明白为什么。 我试图改变&->* canvas4.cpp void Canvas4::createStuff() { ballCollection.clear(); for (int i=0; i<num; i++) { ofVec2f org;

我在OpenFrameworks artwork上遇到了这个错误。但是看起来是一个简单的C++问题。
ofVec2f does not refer to a value
当然,我在指针方面有问题,但我不明白为什么。 我试图改变&->*

canvas4.cpp

void Canvas4::createStuff() {
    ballCollection.clear();
    for (int i=0; i<num; i++) {
        ofVec2f org;
        org.set(ofRandom(edge, ofGetWidth()-edge), ofRandom(edge, ofGetHeight()-edge));
        float radius = ofRandom(50, 150);
        ofVec2f loc;
        loc.set(org.x+radius, org.y);
        float offSet = ofRandom(TWO_PI);
        int dir = 1;
        float r = ofRandom(1);
        if (r>.5) dir =-1;
        myBall = new Ball(org, loc, radius, dir, offSet);
        ballCollection.push_back(* myBall);
    }

//
标题画布4.h

class Ball {
public:
    ofVec2f org;
    ofVec2f loc;
    float sz = 10;
    float theta, radius, offSet;
    int s, dir, d = 60;

    Ball(ofVec2f &_org, ofVec2f &_loc, float _radius, int _dir, float _offSet);


};


class Canvas4{
public:
    int fc = 100;
    int num = 100;
    int edge = 200;
    vector<Ball> ballCollection;
    Boolean save = false;
    ofFbo fbo;
    Ball *myBall;

    Canvas4();


};
班级舞会{
公众:
ofVec2f组织;
ofVec2f-loc;
浮点数sz=10;
浮点θ、半径、偏移量;
int s,dir,d=60;
球(ofVec2f和ofVec2f和OF loc,浮动半径,int dir,浮动偏移);
};
班级拉票4{
公众:
int fc=100;
int num=100;
int edge=200;
向量收集;
布尔保存=假;
ofFbo fbo;
球*我的球;
游说4();
};

< /代码>

不需要查看整个,但在我的头脑中,C++编译器会将变量名级联为未声明的类型,如果它们的类型也未声明,尽管在那里可以看到无类型变量是int,导致各种愚蠢。p>


除此之外,检查您所拥有的内容是否包含ofVec2,并查看它位于哪个名称空间中。比如,如果ofVec2f位于某个名称空间中,则需要使用名称空间名称;或者,更可取的是,使用其名称空间前缀引用ofVec2f。

所有问题都是单个“}”的泄漏,不关闭Canvas::createStuff()方法

很抱歉这个问题


是否应该删除线程?

如果使用点(
)运算符而不是作用域(
)运算符调用静态方法,也会导致此错误。

在哪个构造函数调用中会发生错误?在
myBall=新球(组织、位置、半径、方向、偏移量)或在球集合中。向后推(*myBall)?@TobiMcNamobi这一个球::球(ofVec2f和ofVec2f和ofVec2f和OF loc,浮点半径,int dir,浮点偏移量)明白了。但是堆栈跟踪的下一步是什么?名为“
Canvas4::createStuff()”
的构造函数将像筛子一样在这些行中泄漏内存:
myBall=newball(org、loc、radius、dir、offSet);收集球。向后推球(*myBall)将其更改为
ballCollection.push_back(球(组织、位置、半径、方向、偏移))绝对没有理由在那里动态分配内存。问题不在这里,但是在C和C++中,标识符从下划线开始(或者包含双下划线)被保留。如果您使用它们并且运气不好,则可能会与编译器特定的关键字、标准库内部构件等发生冲突。一个尾随下划线(例如,
hello
)就可以了。这是我多年前经常犯的一个错误,因为我看了编译器提供的头文件,认为它们是一个很好的模仿例子。如果需要参数的命名约定,最常见的似乎是使用
pname
p_name
pname
等。类成员使用
m
的前缀也很常见。
ovVec2f
是一个简单的二维向量类,请参阅。如果没有正确地包含头,或者实现链接错误,那么将分别出现编译器或链接器错误。但是从上面的描述中,我发现OP出现了运行时错误,我下载了框架并查看了ofVec2f的源文件。它不在任何名称空间中,所以可能他没有包括它。他在抱怨一个编译器错误。也许,见鬼,他可以试着把“ofVec2f.h”放在文件的顶部。然后从那里,也许可以确保src在他的include路径中。但是,在没有看到整个项目的情况下,很难判断。不,让它打开。让人们知道他们正在遇到这个问题是件好事。。。。我应该想,哦,坏类型也可能是一个畸形支架的信号。
class Ball {
public:
    ofVec2f org;
    ofVec2f loc;
    float sz = 10;
    float theta, radius, offSet;
    int s, dir, d = 60;

    Ball(ofVec2f &_org, ofVec2f &_loc, float _radius, int _dir, float _offSet);


};


class Canvas4{
public:
    int fc = 100;
    int num = 100;
    int edge = 200;
    vector<Ball> ballCollection;
    Boolean save = false;
    ofFbo fbo;
    Ball *myBall;

    Canvas4();


};