繁体   English   中英

类外的成员函数定义

[英]Member function definition outside the class

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

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();
}

我已经在“ acc.h”文件中声明了“ mem”类,并将该“ acc.h”也添加到了acc.cpp文件中。 但是,当我从函数中调用该类时。 它无法回应。 显示未声明的“ a”和“ mem”。 我如何才能完美地链接该类的定义和该类的成员函数,以便从另一个函数调用该类的成员函数不会造成任何问题?

如果您从acc.h文件中删除了#include "acc.cpp" ,它应该可以正确编译。 我尝试了,它为我编译。 我同样使用Visual Studio 2010。

除此之外,还有其他一些评论:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM