2013-05-16 104 views
-1

我在我的代码中收到一个错误,我根本得不到。我的课程无法正常工作

这里是我的代码:

MyClass.h

#include "MyClass.h" 

int i = 1; 

MyClass::MyClass() 
{ 

} 

MyClass:~MyClass() 
{ 

} 

MyClass.cpp #PRAGMA一次

class MyClass 
{ 
    public: 
     MyClass(); 
     virtual ~MyClass(); 

     int i; 
    protected: 
    private: 
}; 

的main.cpp

#include<iostream> 
#include "MyClass.h" 

using namespace std; 

int main() 
{ 
    MyClass myObject = *new MyClass(); 

    cout << myObject.i << endl; 
    cin.get(); 
} 

我只是得到一些随机数。这里有帮助吗?

+0

你正在泄漏记忆。只需创建如下对象:'MyClass myObject;' - 将调用放到'new'。 –

+1

您的'MyClass.h'和'MyClass.cpp'标签看起来放错了位置。 –

+1

我欣赏编译的代码。你的不是。 – chris

回答

2

您还没有初始化在类i,你的构造应该是这个样子:

MyClass::MyClass() : i(1) 
{} 

它也像你有几个错别字,这样的:

MyClass myObject = *new MyClass(); 

应该是:

MyClass *myObject = new MyClass(); 

这:

cout << myObject.i << endl;  

应该是:

cout << myObject->i << endl; 

虽然,正如克里斯说,简单的办法是如下:

MyClass myObject ; 

cout << myObject.i << endl; 
+0

我会去'MyClass myObject;'而不是指针:) – chris

+0

@chris是的,我知道,我只是想尽量接近OP的代码。我修改了我的答案,认为这是一种更简单的方法。 –

0

你设置为1我是不是类的成员。它是任何类之外的静态变量。

0

一旦我属于你的类,你需要初始化它的构造

#include "MyClass.h" 

// int i = 1; <-- not here 

MyClass::MyClass() 
{ 
    i = 1; // here 
} 

内,以初始化主要功能您的对象只是做这样的事情:

int main() 
{ 
// MyClass myObject = *new MyClass(); <-- myObject is not a pointer 
    MyClass myObject; 

    cout << myObject.i << endl; 
    cin.get(); 
} 
+0

这不是初始化。这是任务。当你尝试调用一个构造函数,或者使用一个const或引用,或者类似的东西时,它会有所不同。 – chris

0

两件事情错了:首先,您在MyClass.cpp中重新声明我,请尝试在构造函数中指定它:

//int i = 1; 

MyClass::MyClass() : i(1) 
{ 

} 

其次,你在main()中声明对象的方式也是错误的。要么你做:

int main() 
{ 
    MyClass* myObject = new MyClass(); 

    cout << myObject->i << endl; 
    cin.get(); 

    delete myObject; 
} 

如果你想有一个指针指向一个动态分配的对象,或只是

int main() 
{ 
    MyClass myObject; 

    cout << myObject.i << endl; 
    cin.get(); 
} 
如果你想在栈上分配的对象