近日写了程序,但是总也运行不行。大家帮忙看看吧,都快晕掉了两个文件,一个类。。
运行总是GetAt的时候,会出错。
1model.cpp
/******************************
*Kenny's first model
*
*Task A, Task B, Array C.
*Task A = 1,3,5,7,9.....99
*
*Put data of A in array C
*Then B retrieve it and print it.
*
*
******************************///#include <stdafx.h>
#include <iostream>
#include "1model.h"
using std::cout;
using std::endl;//Constructor
TaskModelOne::TaskModelOne(char task_name)
{
TaskName = task_name;
char a[256];
TaskData = a;
cout << "Task " << TaskName
<< " called."
<< endl;
}
//Constructor
TaskModelOne::TaskModelOne()
{
char a[256];
TaskData = a;
cout << "Task"
<< " called and having no name..."
<< endl;
}void TaskModelOne::InputToArray(CString& to)
{
int i = 0;
do
{
to.SetAt(i, TaskData.GetAt(i));
i++;
}
while (TaskData.GetAt(i));
}void TaskModelOne::RetriveFromArray(CString& from)
{
int i = 0;
char value = from.GetAt(i);
do
{
TaskData.SetAt(i, value);
value = from.GetAt(++i);
}
while (value);
int Num = i;
}void TaskModelOne::PrintArray()
{ if (!TaskData.IsEmpty())
{
for (int i = 0; i < TaskData.GetLength(); i++)
{
cout << "The Data" << i
<< "is" << (int)(TaskData.GetAt(i))
<< endl;
}
}
else
{
cout << "The Array is empty..."
<< endl;
}
}
//Destructor
TaskModelOne::~TaskModelOne()
{
cout << "Task exits..." << endl;
}
void main()
{
TaskModelOne A('A');
TaskModelOne B('B');
char a[256];
CString Data = a;
CString C = a;
int i = 0;
char j = 1;
do
{
//ASSERT(Data.IsEmpty() == 0);
Data.SetAt(i, j);
j += 2;
i++;
}
while (j <= 99);
A.RetriveFromArray(Data);
A.InputToArray(C);
B.RetriveFromArray(C);
B.PrintArray();
}1model.h
/*Defination of Task*/
#ifndef MODELONE_H
#define MODELONE_H#include <afx.h>
class TaskModelOne
{
public:
TaskModelOne();
TaskModelOne(char task_name); void RetriveFromArray(CString& from);
void PrintArray();
void InputToArray(CString& to); ~TaskModelOne();private:
CString TaskData;
char TaskName; };#endif
运行总是GetAt的时候,会出错。
1model.cpp
/******************************
*Kenny's first model
*
*Task A, Task B, Array C.
*Task A = 1,3,5,7,9.....99
*
*Put data of A in array C
*Then B retrieve it and print it.
*
*
******************************///#include <stdafx.h>
#include <iostream>
#include "1model.h"
using std::cout;
using std::endl;//Constructor
TaskModelOne::TaskModelOne(char task_name)
{
TaskName = task_name;
char a[256];
TaskData = a;
cout << "Task " << TaskName
<< " called."
<< endl;
}
//Constructor
TaskModelOne::TaskModelOne()
{
char a[256];
TaskData = a;
cout << "Task"
<< " called and having no name..."
<< endl;
}void TaskModelOne::InputToArray(CString& to)
{
int i = 0;
do
{
to.SetAt(i, TaskData.GetAt(i));
i++;
}
while (TaskData.GetAt(i));
}void TaskModelOne::RetriveFromArray(CString& from)
{
int i = 0;
char value = from.GetAt(i);
do
{
TaskData.SetAt(i, value);
value = from.GetAt(++i);
}
while (value);
int Num = i;
}void TaskModelOne::PrintArray()
{ if (!TaskData.IsEmpty())
{
for (int i = 0; i < TaskData.GetLength(); i++)
{
cout << "The Data" << i
<< "is" << (int)(TaskData.GetAt(i))
<< endl;
}
}
else
{
cout << "The Array is empty..."
<< endl;
}
}
//Destructor
TaskModelOne::~TaskModelOne()
{
cout << "Task exits..." << endl;
}
void main()
{
TaskModelOne A('A');
TaskModelOne B('B');
char a[256];
CString Data = a;
CString C = a;
int i = 0;
char j = 1;
do
{
//ASSERT(Data.IsEmpty() == 0);
Data.SetAt(i, j);
j += 2;
i++;
}
while (j <= 99);
A.RetriveFromArray(Data);
A.InputToArray(C);
B.RetriveFromArray(C);
B.PrintArray();
}1model.h
/*Defination of Task*/
#ifndef MODELONE_H
#define MODELONE_H#include <afx.h>
class TaskModelOne
{
public:
TaskModelOne();
TaskModelOne(char task_name); void RetriveFromArray(CString& from);
void PrintArray();
void InputToArray(CString& to); ~TaskModelOne();private:
CString TaskData;
char TaskName; };#endif
// 下面这样CString的Data和C都是空的,内存长度也是空,这样CString并没有分配内存的。
char a[256];
CString Data = a;
CString C = a; // 所以你下面的就出错了
void TaskModelOne::InputToArray(CString& to)
{
int i = 0;
do
{
to.SetAt(i, TaskData.GetAt(i)); // 如果to为空的话怎么可以GetAt呢?
i++;
}
while (TaskData.GetAt(i)); // 同理,TaskData是否为空??
} void TaskModelOne::RetriveFromArray(CString& from)
{
int i = 0;
char value = from.GetAt(i); // 这个也一样,from为空就会出错的哦
do
{
TaskData.SetAt(i, value);
value = from.GetAt(++i);
}
while (value);
int Num = i;
}
CString如何赋初值,分配内存呢?在main函数里,
A.RetriveFromArray(Data);
A.InputToArray(C);
之前,有对Data赋值哦,不过赋的好像不对呢,,,请赐教!!!好像对CString的初始化也不对...查了好久,不会呢..
请帮帮我好吗?