注册 登录
编程论坛 C++教室

在定义类的static成员变量的时候碰到一个问题

jerry5945 发布于 2011-04-03 20:40, 1503 次点击
#ifndef NANOTUBE_H_INCLUDED
#define NANOTUBE_H_INCLUDED

#include<iostream>
#include<fstream>
#include<string>
#include<cmath>
#include<vector>
using namespace std ;

class NanoTube
{
private:
    class Atom
    {
    public:
        Atom()                          ;
        double x,y,z                    ;
        double xo,yo,zo                 ;
        double fx,fy,fz                 ;
        double vx,vy,vz                 ;
        vector<int> inner_neighbor      ;
        vector<int> outer_neighbor[2]   ;
    } ;
    double length                       ;
    double ukin                         ;
    int flag                            ;//flag:-1 for rotor, 0,1 for stator(left&right)
    vector<Atom> nanotube               ;
    static int tran_period              ;
    static double rcut                  ;
    static double delta_t               ;
    static double mass                  ;


public:
    NanoTube(int temp_flag)                                                         ;
    NanoTube(NanoTube& temp)                                                        ;
    ~NanoTube()                                                                     ;
    void initial_position_velocity(string infile_name)                              ;
    void inner_neighborlist()                                                       ;
    void set_temperature(double temp)                                               ;
    void cal_force_tersoff()                                                        ;
    void cal_force_LJ(NanoTube& temp_tube)                                          ;
    void integrate(bool transient = false, double temp = 0)                         ;
    void output_position(string filename)                                           ;
    static void outer_neighborlist(NanoTube& tube_1, NanoTube& tube_2)              ;
    static void input_parameter(string infile_parameter_filename)                   ;

    //-------public static parameter-------------
    static int period                   ;

};

    static int tran_period              ;
    static double rcut                  ;
    static double delta_t               ;
    static double mass                  ;

#endif // NANOTUBE_H_INCLUDED


碰到了一个问题。
我定义了一个类,分为头文件和实现文件俩文件。当我把初始化这个static变量放在头文件中的时候报错了(如上程序),而且是一些我看不懂的错误;而把初始化放在实现文件中,错误就消息了。
错误如下:
\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\bits\locale_facets.tcc 2497(line) first defined here

想请教一下,这样的错误是什么意思,完全看不懂!

[ 本帖最后由 jerry5945 于 2011-4-3 23:34 编辑 ]
9 回复
#2
草狼2011-04-03 21:54
前面的 int 不需要的吧
#3
bccn2502011-04-03 23:06
怎么样个弄法?

类和静态成员在同一个文件吗?
代码应该很短吧,满发上来看看
#4
jerry59452011-04-03 23:33
空空空

[ 本帖最后由 jerry5945 于 2011-4-3 23:35 编辑 ]
#5
bccn2502011-04-04 01:22
哈哈看了半天,还以为旁边的是什么东西呢,原来是那么多分号,我喜欢

不知道是不是你语法错误

如果是的话,那好好再看看书,看看类的静态变量是如何定义的

class A
{
    static int a1;
}
int A::a1=0;
#6
pangding2011-04-04 10:57
我头一次看见分号写成这样的……
这是你们项目的要求吗?
#7
hnuhsg12262011-04-04 15:45
同上,顶贴
#8
loveminttea2011-04-05 13:29
看不懂,顶上,让大家共同解决
#9
jerry59452011-04-05 23:05
回复 6楼 pangding
分号只是个人的习惯.....
#10
jerry59452011-04-05 23:07
回复 5楼 bccn250
对呀,就是按着这个语法编的。但是那个初始化语句如果放在头文件里(像贴出来的那样)就会出现错误。如果把初始化语句放到实现文件里就没问题了!!我也很纳闷....
1