【发布时间】:2021-12-20 14:34:08
【问题描述】:
我是 StackOverflow 的新手,对 C++ 还是很陌生。当我尝试在我的程序“ising.cpp”中定义一个函数时,我遇到了问题。那是body函数,它还没有完成,但它的开发与我的错误无关:
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <time.h>
#include <stdlib.h>
#include "libreria.h"
using namespace std;
void MetroHastings (system * old_state,int method) {
system new_state;
new_state = *old_state;
}
int main () {
return 0;
}
我认为它与 class system 构造有关,它位于“liberia.h”中:
#ifndef libreria_h
#define libreria_h
using namespace std;
struct vecI_2d {
int nx;
int ny;
};
struct vecD_2d {
double x;
double y;
};
struct atom {
double spin; // 0,1,-1
};
class system {
double T;
int i,j;
double energy;
double J = 1;
atom ** particles;
public:
system();
system (double T, int ix,int iy);
void number_particle (int n);
void ComputeEnergy();
double ReturnEnergy();
double CloseEnergy(int ix,int iy);
double magnetization();
};
#endif
并且类主体定义在“liberia.cc”中:
#include "libreria.h"
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <time.h>
#include <stdlib.h>
using namespace std;
system::system(double T, int sx, int sy) {
i=sx;
j=sy;
int r;
particles = new atom *[i];
for (int k=0;k<i;k++) {
particles[k] = new atom[j];
}
for (int kx=0;kx<i;kx++) {
for(int ky=0;ky<j;ky++) {
r = rand()%1;
if (r==1) {
particles[kx][ky].spin = 1;
}
else {
particles[kx][ky].spin = -1;
}
}
}
}
等等... 这是我用来编译的命令:
g++ ising.cpp libreria.cc -o ising
我不明白为什么会出现这个错误。我总是在我的 cpp 文件中定义函数,我不知道为什么编译器会将其误认为是变量声明。提前谢谢你:)
【问题讨论】:
-
这里问的时候尽量减少代码。这个问题可以用三行代码复现:
#include <stdlib.h>class system {};void foo(system *bar) {}。 -
首先,在之前的一个头文件(stdlib.h)中已经有一个“系统”的定义/声明,我建议你先解决这个问题。它也是显示所有输出的好形式,可以帮助人们提供更好的建议。
标签: c++ scope declaration unqualified-name