如代码:
#include <Windows.h>
 #include <atltypes.h>
 
 int main()
 {
  CPoint a;
 }编译没错误,可链接时出现如下错误:
1>------ 已启动生成: 项目: 测试, 配置: Debug Win32 ------
 1>生成启动时间为 2012/9/27 21:34:11。
 1>InitializeBuildStatus:
 1>  正在创建“Debug\测试.unsuccessfulbuild”,因为已指定“AlwaysCreate”。
 1>ClCompile:
 1>  Main.cpp
 1>Main.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall CPoint::CPoint(void)" (??0CPoint@@QAE@XZ),该符号在函数 _main 中被引用
 1>E:\Projects\C++\测试\Debug\测试.exe : fatal error LNK1120: 1 个无法解析的外部命令
 1>
 1>生成失败。
 1>
 1>已用时间 00:00:03.60
 ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
当改成:
 #include <Windows.h>
  #include <atltypes.h>
  
  int main()
  {
   CPoint a();
  }会出现:
1>------ 已启动生成: 项目: 测试, 配置: Debug Win32 ------
 1>生成启动时间为 2012/9/27 21:36:13。
 1>InitializeBuildStatus:
 1>  正在对“Debug\测试.unsuccessfulbuild”执行 Touch 任务。
 1>ClCompile:
 1>  Main.cpp
 1>e:\projects\c++\测试\测试\main.cpp(6): warning C4930: “CPoint a(void)”: 未调用原型函数(是否是有意用变量定义的?)
 1>Link:
 1>  测试.vcxproj -> E:\Projects\C++\测试\Debug\测试.exe
 1>FinalizeBuildStatus:
 1>  正在删除文件“Debug\测试.unsuccessfulbuild”。
 1>  正在对“Debug\测试.lastbuildstate”执行 Touch 任务。
 1>
 1>生成成功。
 1>
 1>已用时间 00:00:03.41
 ========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========
 
请问这是怎么回事儿?

解决方案 »

  1.   

    很正常啊。现在的状况是你引入了.h文件1.实例化了,要.h配合.cpp调用CPoint的构造函数呢。没有.cpp所以编译不过2. 你这个不是写了一个函数,只是申明了一个函数。返回值为CPoint,有.h了。编译器就承认你这个返回值,所以不会报告错误。(不要对应去找寻.cpp 这只是个类型而已)
      

  2.   

    这个不是声明函数,是定义一个CPoint类的对象,如果写成“CPoint a”,会出现第一幅图片的问题;如果写成“CPoint a()”,可以正常运行
      

  3.   

    哦,明白了你的意思了。
    但CPoint a;就是不行,而且MSDN上只说了“atltypes.h”头文件
      

  4.   

    CPoint a;就是不行的原因我解释的很清楚了你这样就是实例化,实例化就要自动调用构造函数了,你.h 没有对CPoint的构造函数有实现,自然就报错了。如果.h中有实现不会报错的
      

  5.   

    CPoint a;应该没问题,你再检查检查
      

  6.   

    从MSDN中可知,CPoint类就是在“atltypes.h”头文件中,难道还要其他什么文件吗?
      

  7.   

    void CMyDlg::OnButton1() 
    {
    CPoint a;
    }
    没问题
      

  8.   

    请问,如果只是在新建的空控制台程序中main函数用CPoint,那应该怎么做?
      

  9.   

    这样使用时可以的:
    #include   <afxwin.h> 
    #include <Windows.h>void   main() 

        CPoint a;
    } 记得在
    Project->setting->Microsoft foundation Classes中选取
    use   MFC   in   shared   DLL
      

  10.   

    楼主原来是想在控制台用MFC的的类啊。
    我当楼主是在研究呢。Property->General->Use of MFC ->Use MFC in a Shared DLL
      

  11.   


    atltypes.h
    atltypes.inl
    atltypes.cpp
    都添加到工程里
      

  12.   

    CPoint只能用在MFC中,控制台程序中不能用。。
      

  13.   

    CPoint 是MFC里的东东啊 如果想在windows控制台程序调用 加上:
    #include<afx.h>
      

  14.   

    谢谢各位的解答,确实是想研究的,因为是其他地方出了问题,然后看MSDN,但上面没说只能用于MFC,说在头文件“atltyes.h”中,而且说是Shared Classes。然后看了Shared Classes。但上面说可以用于本地C++。