C++ 对'Init::b';

C++ 对'Init::b';,c++,netbeans,linkage,C++,Netbeans,Linkage,我在这里上课 #include<cstdlib> #include<time.h> struct between{ double min; double max; }; class Init{ public: static const int args=2; static between* b; static double function(double i[]){ return abs(i[0]

我在这里上课

#include<cstdlib>
#include<time.h>

    struct between{
    double min;
    double max;
};

class Init{



public:
    static const int args=2;
    static between* b;

    static double function(double i[]){
        return abs(i[0]*i[1]);
        return (25*i[0]*i[0]-5*i[0]+3);
    }

    static double abs(double d){
        return (d>0?d:-d);
    }

};
#包括
#包括
结构之间{
双分钟;
双峰;
};
类初始化{
公众:
静态常量int args=2;
在*b之间的静态;
静态双功能(双i[]{
返回abs(i[0]*i[1]);
返回(25*i[0]*i[0]-5*i[0]+3);
}
静态双abs(双d){
返回(d>0?d:-d);
}
};
课程包括:

#include "Init.cpp"
#include<iostream>

using namespace std;
class Chunk{
public:
    double values[Init::args];
    double res;
    static Chunk* sex(Chunk* c1,Chunk* c2){
        Chunk* c=new Chunk();
        for(int a=0;a<Init::args;a++){
            double t=getRand();
            c->values[a]=c1->values[a]*t+c2->values[a]*(1.0-t);
        }
        return c;

    }

    static double getRand(){
        double d=rand()/(double)RAND_MAX;
        return d;
    }

    double getResult(){

        res=Init::function(values);
    }

    static Chunk* generateChunk(){
    Chunk* c=new Chunk();
        for(int a=0;a<Init::args;a++){
            double t=getRand();
            c->values[a]=Init::b[a].min*t+Init::b[a].max*(1.0-t);//ERROR HERE!
        }
    return c;
    }

};
#包括“Init.cpp”
#包括
使用名称空间std;
类块{
公众:
双值[Init::args];
双res;
静态区块*性别(区块*c1,区块*c2){
Chunk*c=新Chunk();
对于(int a=0;avalues[a]=c1->values[a]*t+c2->values[a]*(1.0-t);
}
返回c;
}
静态双getRand(){
双d=rand()/(双)rand_MAX;
返回d;
}
double-getResult(){
res=Init::函数(值);
}
静态块*generateChunk(){
Chunk*c=新Chunk();
for(int a=0;avalues[a]=Init::b[a].min*t+Init::b[a].max*(1.0-t);//此处出错!
}
返回c;
}
};
我得到一个错误:

/home/oneat/NetBeansProjects/wearethechampions/Chunk.cpp:33:对'Init::b'的未定义引用


知道原因吗?

您需要添加一个CPP文件:

between* Init::b = NULL ; 
您在标题中定义了b,但没有在任何对象中定义静态对象的主体

编辑(因为您只有.cpp文件)

在类外定义b值

也就是说,在Init类声明之后,添加以下行:

between* Init::b=NULL;

您需要添加一个CPP文件:

between* Init::b = NULL ; 
您在标题中定义了b,但没有在任何对象中定义静态对象的主体

编辑(因为您只有.cpp文件)

在类外定义b值

也就是说,在Init类声明之后,添加以下行:

between* Init::b=NULL;

您需要添加一个CPP文件:

between* Init::b = NULL ; 
您在标题中定义了b,但没有在任何对象中定义静态对象的主体

编辑(因为您只有.cpp文件)

在类外定义b值

也就是说,在Init类声明之后,添加以下行:

between* Init::b=NULL;

您需要添加一个CPP文件:

between* Init::b = NULL ; 
您在标题中定义了b,但没有在任何对象中定义静态对象的主体

编辑(因为您只有.cpp文件)

在类外定义b值

也就是说,在Init类声明之后,添加以下行:

between* Init::b=NULL;

错误是由类
Init
中未定义的静态变量引起的

您声明了两个这样的变量:

static const int args = 2;
这是类初始化中的声明和——允许在类主体内初始化常量整数。此类成员不需要额外定义,除非您想将其用作

这只是声明
b
在任何地方都没有定义。在包含属于
Init
类的方法定义的源文件(
.cpp
)中,添加以下行(您通常希望零初始化所有指针):


错误是由类
Init
中未定义的静态变量引起的

您声明了两个这样的变量:

static const int args = 2;
这是类初始化中的声明和——允许在类主体内初始化常量整数。此类成员不需要额外定义,除非您想将其用作

这只是声明
b
在任何地方都没有定义。在包含属于
Init
类的方法定义的源文件(
.cpp
)中,添加以下行(您通常希望零初始化所有指针):


错误是由类
Init
中未定义的静态变量引起的

您声明了两个这样的变量:

static const int args = 2;
这是类初始化中的声明和——允许在类主体内初始化常量整数。此类成员不需要额外定义,除非您想将其用作

这只是声明
b
在任何地方都没有定义。在包含属于
Init
类的方法定义的源文件(
.cpp
)中,添加以下行(您通常希望零初始化所有指针):


错误是由类
Init
中未定义的静态变量引起的

您声明了两个这样的变量:

static const int args = 2;
这是类初始化中的声明和——允许在类主体内初始化常量整数。此类成员不需要额外定义,除非您想将其用作

这只是声明
b
在任何地方都没有定义。在包含属于
Init
类的方法定义的源文件(
.cpp
)中,添加以下行(您通常希望零初始化所有指针):


我这里没有h文件,然后给b分配一些初始值。我假设第一个是头文件。如果我为null,我会得到。Init.cpp:15:23:错误:非整数类型的静态数据成员的类内初始化无效“between*”请参阅我刚才所做的编辑。你需要在类外分配值。我这里没有h文件,然后分配me b的初始值。我假设第一个值是头文件。如果我为null,我会得到。Init.cpp:15:23:错误:非整数类型的静态数据成员的类内初始化无效“between*”请参阅我刚才所做的编辑。您需要在类外指定值。我这里没有h文件,然后为b指定一些初始值。我假设第一个是头文件。如果我为null,我会得到.Init.cpp:15:23:错误:非整数类型的静态数据成员的类内初始化无效“between*”请参阅我刚才所做的编辑。您需要在类外指定值。我这里没有h文件,然后为b指定一些初始值。我假设第一个