我已经阅读过许多类似的问答,所以我寻求帮助,但实际上没有一个帮助我。
我写了一个库(libreria.h),其中包含“libreria.cc”和main.cpp。一切似乎都很好,但是当我尝试编译时(我在Ubuntu Terminal上进行编译),它说:“未在此范围内声明integral_area”。
我的代码应该在数学函数(实际上是该函数积分的值)下计算面积的均值和方差。
需要明确的是,如果我将单个功能放在主要功能之上,则代码会起作用。问题是当我尝试将它们放入外部库中时。
这是代码(我将var名称从意大利语更改为英语,如果有输入错误,请不要介意,因为原始代码没有它们。我检查了将近十亿次。问题出在其他地方) :
libreria.h
#ifndef libreria_h
#define libreria_h
class libreria
{
public:
~libreria();
double random ();
double randomrange (double xmin, double xmax);
double matfunc(double x);
double integral_area(double xmin, double xmax,double ymin, double ymax);
private:
double x;
double xmin;
double xmax;
double ymin;
double ymax;
int N;
};
#endif
libreria.cc
#include "libreria.h"
#include <iostream>
#include <cstdlib>
using namespace std;
double libreria::random (){
return (rand() / (1.*RAND_MAX));
}
double libreria::randomrange (double xmin, double xmax){
return (xmin + (xmax-xmin) * rand() / (1.*RAND_MAX));
}
double libreria::matfunc(double x){
return (exp(-1*x*x*4));
}
double libreria::integral_area(double xmin,double xmax,double ymin,double ymax){
double x = 0.;
double y = 0.;
do {
x= randomrange(xmin,xmax);
y= randomrange(ymin,ymax); }while(y > matfunc(x));
return(x);
}
libreria::~libreria(){ //do nothing
}
main.cpp
#include <cstdlib>
#include <iostream>
#include <ctime>
#include <iomanip>
#include <math.h>
#include "libreria.h"
#include "libreria.cc"
using namespace std;
int main () {
srand(time(NULL));
double ax,bx,ay,by; // [ax,by] [ay,by]
double N,p;
double mean=0,meanq=0,variance=0;
cin >> N;
cin >> ax >> bx;
cin >> ay >> by;
for(int i=1; i<=N; i++){
p = integral_area(ax,bx,ay,by);
cout << "Val " << i << ": " << setprecision(2) << p << endl;
mean+=p;
meanq+=(p*p);
p=0;
}
mean=mean/N;
cout << "Mean is: " << setprecision(2) << mean << endl;
meanq=meanq/N;
variance=(meanq- (mean*mean));
cout << "Variance is: " << setprecision(2) << variance << endl;
}
最佳答案
libreria
是一个类,您尚未声明它的实例。您需要执行以下操作:
libreria l; // at the top
// rest of code.....
l.integral_area(ax,bx,ay,by);
关于c++ - main.cpp中的错误:库 “not declared in this scope”中的函数,但实际上是,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42110226/