首先,我正在给出代码。然后我在解释我面临的问题。
的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;没有宣布。如何完美地链接该类的定义和该类的成员函数,以便从另一个函数调用该类的成员函数不会产生任何问题?
答案 0 :(得分:1)
如果从#include "acc.cpp"
文件中删除acc.h
,它应该编译而没有任何错误。我试过,它为我编译。我正在使用Visual Studio 2010。
除此之外,还有更多评论:
#pragma once
而不是#ifndef/#define
宏。前者更清洁。class mem
之前转发声明main()
,因为您已经包含acc.h
。show()
可以移至定义main()
的位置,使acc.h/acc.cpp
类专用mem
个文件。mem.h/mem.cpp
。即使不打开文件,这也会通知哪个文件包含哪个类。