Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 类外的成员函数定义_C++_Function_Class_Header - Fatal编程技术网

C++ 类外的成员函数定义

C++ 类外的成员函数定义,c++,function,class,header,C++,Function,Class,Header,首先,我给出代码。然后我解释我面临的问题 main.cpp acc.cpp mem class I已在acc.h文件中声明,并将acc.h添加到acc.cpp文件中。但当我从函数调用该类时。它无法响应。显示a和未声明的mem。如何将该类定义和该类的成员函数完美地链接起来,以便从另一个函数调用该类的成员函数不会产生任何问题?如果从acc.h文件中删除include acc.cpp,则它应该编译时不会出现任何错误。我试过了,它为我编译了。我也在使用VisualStudio2010 除此之外,没有更多

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

main.cpp

acc.cpp

mem class I已在acc.h文件中声明,并将acc.h添加到acc.cpp文件中。但当我从函数调用该类时。它无法响应。显示a和未声明的mem。如何将该类定义和该类的成员函数完美地链接起来,以便从另一个函数调用该类的成员函数不会产生任何问题?

如果从acc.h文件中删除include acc.cpp,则它应该编译时不会出现任何错误。我试过了,它为我编译了。我也在使用VisualStudio2010

除此之外,没有更多的评论:

您可以在头文件中使用pragma一次,而不是ifndef/define宏。前者更干净。 您不需要在main之前转发声明类mem,因为您已经包含acc.h。 可以将显示移动到定义main的位置,使acc.h/acc.cpp文件专用于mem类。 头文件应始终以它所持有的类命名,即在您的情况下为mem.h/mem.cpp。即使不打开文件,也会通知哪个文件包含哪个类。
为什么要将acc.cpp纳入acc.h?我认为没有必要。是的,你是对的。我只是尝试了尝试和错误的方法,这就是它存在的原因。我正在纠正它。谢谢。С++是一种有良好文档记录的语言,不需要“反复试验”acc。cpp应包括“acc.h”ALSORTRIAL,并且错误不是一种好的学习方法,您应该从开始,不幸的是,您的第一个解决方案在Codeblocks 17.01版本IDE中不起作用。
#include <iostream>
#include "acc.h"

using namespace std;
class mem;
int main()
{
    show();
    return 0;
}
#ifndef ACC_H
#define ACC_H

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

class mem{
    int a;
public:
    void showa();
    void seta(int A);
};
#endif
#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();
}