我知道:MFC中类的成员函数在.h文件中声明,然后在.cpp文件中实现。
我的问题:类的成员函数应该在哪里声明、定义?
我的做法(有问题):
1、将类的成员变量写在.h文件中,则此变量成功声明为该类的成员变量。但是由于.h被包含两次(一次在类的实现文件.cpp中,一次在主函数的.cpp中)会出现多重定义的问题。代码:
-------------myClass.h-------------class myClass
{
protected:
  int a;
public:
  int getA();
};-------------myClass.cpp-------------#include 'myClass.h'
int myClass::getA()
{
  return a;
}-------------main.cpp-------------#include 'myClass.h'
void main()
{
  myClass *class1=new myClass;
  class1->getA();
}2、将类的成员变量写在类的实现文件.cpp中,则没有多重定义的问题,但是此变量不是类的成员函数。代码:
-------------myClass.h-------------class myClass
{
public:
  int getA();
};-------------myClass.cpp-------------#include 'myClass.h'int a;int myClass::getA()
{
  return a;
}-------------main.cpp-------------#include 'myClass.h'
void main()
{
  myClass *class1=new myClass;
  class1->getA();
}能否把a声明为myClass成员变量,并且不会出现多重定义,在主函数中使用时也正常?
GOOGLE一下,说是在.h中声明变量需要加extern,但是加了extern编译报错,illegal storage class。
想了好久想不到对策,所以到CSDN上来求救来了。HELP!!

解决方案 »

  1.   

    运行很正常,并没有你所说的重复定义的问题.
    如果你还有重复定义的问题,你可以在头文件中加入#ifndef MYCLASS_H
    #define MYCLASS_Hclass myClass
    {
    protected:
      int a;
    public:
      int getA();
    };#endif这样就不会出现重复定义的情况了。
      

  2.   

    有一个概念需要说明:
    1. *.h文件被包括多次,并不表明其中定义的类以及类成员变量被重复定义;
    2.*.h文件的出现就是为了解决可能发生的重复定义而提出的解决方案,正是通过同一个*.h文件,才确保有关类及其变量具有清楚的唯一性与封装性.