c++的头文件和自定义类的问题

时间:2022-08-30 00:23:03
在u1.hpp里:
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

#2


将u1.cpp修改如下
#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;

就行了。

如果要作为全局变量,可以按楼上的方法。

#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;
}

#5


对了,对于这样的全局变量,怎么进行 delete ?

#6


是恁个的,我来说一下吧。但楼上的解答也都有正确的一面。

在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

#2


将u1.cpp修改如下
#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;

就行了。

如果要作为全局变量,可以按楼上的方法。

#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;
}

#5


对了,对于这样的全局变量,怎么进行 delete ?

#6


是恁个的,我来说一下吧。但楼上的解答也都有正确的一面。

在u1.hpp里,要有一个
extern c1 *myc1;
而在u1.cpp里,实现对myc1的赋值或定义:
c1 *myc1=new c1;
这样,其其他单元里,凡要使用myc1的地方,只要包含u1.hpp,以及写出:
extern c1 *myc1;
就可以了.而且,它们都是同一个全局变量.

为什么要这样而不采用时差的办法呢? 因为,要想在多个单元里使用同一个全局变量,就得像上面我说的那样.

不知道理解是否正确.