class c1
{
public:
int a;
int b;
};
c1 * myc1;
在u1.cpp里:
#include u1.hpp
myc1 = new c1;
在main.cpp里:
#include <iostream>
#include <stdlib.h>
//#include <main.hpp>
#include "u1.hpp"
using namespace std;
int main(int argc, char *argv[])
{
myc1->a=1;
system("PAUSE");
return 0;
}
---------
结果编译报错:
3 G:\Dev-Cpp\myprojs\u1.cpp ISO C++ forbids declaration of `myc1' with no type
3 G:\Dev-Cpp\myprojs\u1.cpp conflicting types for `int myc1'
7 G:\Dev-Cpp\myprojs\u1.hpp previous declaration as `c1*myc1'
请指点,我糊涂了。
6 个解决方案
#1
改成
在u1.hpp里:
class c1
{
public:
int a;
int b;
};
extern c1 * myc1;
在u1.cpp里:
#include u1.hpp
c1 *myc1 = new c1;
最后,你的程序没有delete myc1
在u1.hpp里:
class c1
{
public:
int a;
int b;
};
extern c1 * myc1;
在u1.cpp里:
#include u1.hpp
c1 *myc1 = new c1;
最后,你的程序没有delete myc1
#2
将u1.cpp修改如下
#ifndef C1 //新加
#define C1 //新加
class c1
{
public:
int a;
int b;
};
#endif //新加
c1 * myc1;
这样你在试一下,建议将最后一句挪到另一个程序,那里需要那里定义。
#ifndef C1 //新加
#define C1 //新加
class c1
{
public:
int a;
int b;
};
#endif //新加
c1 * myc1;
这样你在试一下,建议将最后一句挪到另一个程序,那里需要那里定义。
#3
这样也行:
在 ul.hpp 里删除掉这一行
c1 * myc1;
在 ul.cpp 里删除掉这一行
myc1 = new c1;
在 main.cpp 里
cl *mycl = new cl;
就行了。
如果要作为全局变量,可以按楼上的方法。
在 ul.hpp 里删除掉这一行
c1 * myc1;
在 ul.cpp 里删除掉这一行
myc1 = new c1;
在 main.cpp 里
cl *mycl = new cl;
就行了。
如果要作为全局变量,可以按楼上的方法。
#4
同意时差的说法
在u1.hpp里:
class c1
{
public:
int a;
int b;
};
在main.cpp里:
#include <iostream>
#include <stdlib.h>
//#include <main.hpp>
int main(int argc, char *argv[])
{
cl *mycl = new cl;
myc1->a=1;
system("PAUSE");
return 0;
}
在u1.hpp里:
class c1
{
public:
int a;
int b;
};
在main.cpp里:
#include <iostream>
#include <stdlib.h>
//#include <main.hpp>
int main(int argc, char *argv[])
{
cl *mycl = new cl;
myc1->a=1;
system("PAUSE");
return 0;
}
#5
对了,对于这样的全局变量,怎么进行 delete ?
#6
是恁个的,我来说一下吧。但楼上的解答也都有正确的一面。
在u1.hpp里,要有一个
extern c1 *myc1;
而在u1.cpp里,实现对myc1的赋值或定义:
c1 *myc1=new c1;
这样,其其他单元里,凡要使用myc1的地方,只要包含u1.hpp,以及写出:
extern c1 *myc1;
就可以了.而且,它们都是同一个全局变量.
为什么要这样而不采用时差的办法呢? 因为,要想在多个单元里使用同一个全局变量,就得像上面我说的那样.
不知道理解是否正确.
在u1.hpp里,要有一个
extern c1 *myc1;
而在u1.cpp里,实现对myc1的赋值或定义:
c1 *myc1=new c1;
这样,其其他单元里,凡要使用myc1的地方,只要包含u1.hpp,以及写出:
extern c1 *myc1;
就可以了.而且,它们都是同一个全局变量.
为什么要这样而不采用时差的办法呢? 因为,要想在多个单元里使用同一个全局变量,就得像上面我说的那样.
不知道理解是否正确.
#1
改成
在u1.hpp里:
class c1
{
public:
int a;
int b;
};
extern c1 * myc1;
在u1.cpp里:
#include u1.hpp
c1 *myc1 = new c1;
最后,你的程序没有delete myc1
在u1.hpp里:
class c1
{
public:
int a;
int b;
};
extern c1 * myc1;
在u1.cpp里:
#include u1.hpp
c1 *myc1 = new c1;
最后,你的程序没有delete myc1
#2
将u1.cpp修改如下
#ifndef C1 //新加
#define C1 //新加
class c1
{
public:
int a;
int b;
};
#endif //新加
c1 * myc1;
这样你在试一下,建议将最后一句挪到另一个程序,那里需要那里定义。
#ifndef C1 //新加
#define C1 //新加
class c1
{
public:
int a;
int b;
};
#endif //新加
c1 * myc1;
这样你在试一下,建议将最后一句挪到另一个程序,那里需要那里定义。
#3
这样也行:
在 ul.hpp 里删除掉这一行
c1 * myc1;
在 ul.cpp 里删除掉这一行
myc1 = new c1;
在 main.cpp 里
cl *mycl = new cl;
就行了。
如果要作为全局变量,可以按楼上的方法。
在 ul.hpp 里删除掉这一行
c1 * myc1;
在 ul.cpp 里删除掉这一行
myc1 = new c1;
在 main.cpp 里
cl *mycl = new cl;
就行了。
如果要作为全局变量,可以按楼上的方法。
#4
同意时差的说法
在u1.hpp里:
class c1
{
public:
int a;
int b;
};
在main.cpp里:
#include <iostream>
#include <stdlib.h>
//#include <main.hpp>
int main(int argc, char *argv[])
{
cl *mycl = new cl;
myc1->a=1;
system("PAUSE");
return 0;
}
在u1.hpp里:
class c1
{
public:
int a;
int b;
};
在main.cpp里:
#include <iostream>
#include <stdlib.h>
//#include <main.hpp>
int main(int argc, char *argv[])
{
cl *mycl = new cl;
myc1->a=1;
system("PAUSE");
return 0;
}
#5
对了,对于这样的全局变量,怎么进行 delete ?
#6
是恁个的,我来说一下吧。但楼上的解答也都有正确的一面。
在u1.hpp里,要有一个
extern c1 *myc1;
而在u1.cpp里,实现对myc1的赋值或定义:
c1 *myc1=new c1;
这样,其其他单元里,凡要使用myc1的地方,只要包含u1.hpp,以及写出:
extern c1 *myc1;
就可以了.而且,它们都是同一个全局变量.
为什么要这样而不采用时差的办法呢? 因为,要想在多个单元里使用同一个全局变量,就得像上面我说的那样.
不知道理解是否正确.
在u1.hpp里,要有一个
extern c1 *myc1;
而在u1.cpp里,实现对myc1的赋值或定义:
c1 *myc1=new c1;
这样,其其他单元里,凡要使用myc1的地方,只要包含u1.hpp,以及写出:
extern c1 *myc1;
就可以了.而且,它们都是同一个全局变量.
为什么要这样而不采用时差的办法呢? 因为,要想在多个单元里使用同一个全局变量,就得像上面我说的那样.
不知道理解是否正确.