none
MFC中定义了一个类,用的时候总是出错,为什么? RRS feed

  • 问题

  • 新建立一个简单的MFC的Dialog工程,定义一个类如下

    //Dog.h
    
    #pragma once;
    
    #ifndef Dog_CLASS
    #define Dog_CLASS
    
    #include <string>
    using namespace std;
    
    class Dog
    {
    public:
    	Dog();
    	Dog(const char* name);
    	virtual ~Dog();
    
    private:
    	int age;
    	string priName;
    	char* m_pName;
    
    public:
    	virtual string GetName() const;
    	virtual string What() const;
    };
    
    #endif
    

    下面是类的实现代码

    //Dog class implement file
    
    #include "stdafx.h"
    #include "Dog.h"
    
    Dog::Dog() 
    { 
    	
    }
    
    Dog::Dog(const char* name) 
    { 
    	this->age = 1;
    	this->priName = name;
    	this->m_pName = new char(strlen(name) + 1);
    	strcpy(m_pName, name);
    }
    
    Dog::~Dog() { }
    
    string Dog::GetName() const
    {
    	return priName;
    }
    
    string Dog::What() const
    {
    	return priName;
    }
    

    然后在CDiglogApp类中定义一个变量Dog* p_mDog;并在CDiglogAppr 构造函数中初始化:this->p_mDog = new Dog("dog");头文件都已经含,编译没有没有问题,然后在运行的时候,就是给priName和m_pName赋值的时候出现错误,看到构造Dog这个对象的失败,状态如下,我想不明白,特来求教!

    -	this->p_mDog	0x00000000
    	__vfptr	CXX0030: Error: expression cannot be evaluated
    	age	CXX0030: Error: expression cannot be evaluated
    -	priName	{???}
    	allocator	{...}
    	_Ptr	CXX0030: Error: expression cannot be evaluated
    	_Len	CXX0030: Error: expression cannot be evaluated
    	_Res	CXX0030: Error: expression cannot be evaluated
    	m_pName	CXX0030: Error: expression cannot be evaluated
    
    

    emyueguang
    2010年12月9日 2:29

答案

全部回复

  • 看代码没什么问题

    不过这里

    -this->p_mDog 0x00000000
    p_mDog的内存分配没有成功

    this->p_mDog = new Dog("dog");你执行到了么

    下断点调试一下

    2010年12月9日 2:38
  • 我在this->p_mDog = new Dog("dog");设置了断点,在VC6.0下面,直接运行过去,对象可以创建成功,可是单步跟踪进去就出现了上面的错误.

    同样的程序,我用VS2005,也在那个地方设置的断点,单步跟踪也是出现了上面的错误,直接运行根本就运行不了,就是那个地方出现BUG.


    emyueguang
    2010年12月9日 2:44
  • 不要放在构造函数里

    在InitInstance里试试

    • 已标记为答案 E米月光 2010年12月9日 3:53
    2010年12月9日 2:48
  • 换成VS2005,先是在构造函数里面,没有设置断点,初始化成功!再在Instance里面,设置断点,单步跟踪进去.over,出现了<错误的指针>,咋就不能单步跟踪呢
    emyueguang
    2010年12月9日 3:08
  • 真的很郁闷,这会编译又没有 问题了~~~
    emyueguang
    2010年12月9日 3:19