类外的成员函数定义

时间:2018-06-02 12:30:28

标签: c++ function class header

首先,我正在给出代码。然后我在解释我面临的问题。

的main.cpp

#include <iostream>
#include "acc.h"

using namespace std;
class mem;
int main()
{
    show();
    return 0;
}

acc.h

#ifndef ACC_H
#define ACC_H

#include "acc.cpp"
void show();

class mem{
    int a;
public:
    void showa();
    void seta(int A);
};
#endif

acc.cpp

#include <iostream>
using namespace std;

void mem::showa(){cout<<a<<endl;}
void mem::seta(int A){a = A;}

void show()
{
    mem m;
    m.seta(22);
    string ss;
    cin>>ss;
    cout<<"MY name is "<<ss<<" ";
    m.showa();
}

&#34; MEM&#34;我在'#34; acc.h&#34;中声明了文件已经并添加了&#34; acc.h&#34;进入acc.cpp文件也。但是当我从一个函数调用该类时。它无法回应。显示&#34; a&#34;和&#34; mem&#34;没有宣布。如何完美地链接该类的定义和该类的成员函数,以便从另一个函数调用该类的成员函数不会产生任何问题?

1 个答案:

答案 0 :(得分:1)

如果从#include "acc.cpp"文件中删除acc.h,它应该编译而没有任何错误。我试过,它为我编译。我正在使用Visual Studio 2010。

除此之外,还有更多评论:

  1. 您可以在头文件中使用#pragma once而不是#ifndef/#define宏。前者更清洁。
  2. 您不需要在class mem之前转发声明main(),因为您已经包含acc.h
  3. show()可以移至定义main()的位置,使acc.h/acc.cpp类专用mem个文件。
  4. 一个头文件应始终以它所持有的类命名,即你的mem.h/mem.cpp。即使不打开文件,这也会通知哪个文件包含哪个类。