近日写了程序,但是总也运行不行。大家帮忙看看吧,都快晕掉了两个文件,一个类。。
运行总是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

解决方案 »

  1.   

    大家可以把这两个文件拷贝到本地文件中(1model.cpp and 1model.h),然后在vc环境下编译运行,编译 是可以的,运行就有警告窗口弹出。谢谢大家
      

  2.   


    // 下面这样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; 

      

  3.   

    哦,谢谢回复...
    CString如何赋初值,分配内存呢?在main函数里,
    A.RetriveFromArray(Data); 
    A.InputToArray(C); 
    之前,有对Data赋值哦,不过赋的好像不对呢,,,请赐教!!!好像对CString的初始化也不对...查了好久,不会呢..
    请帮帮我好吗?