2016-11-11 896 views
-2

我正在为学校的C++项目工作,其中程序将从文本文件中读取数字列表,将它们存储在一个动态数组中,然后将它们打印到另一个文本文件中。说实话,我有点迷失在这个指针,我得到的错误“一个类型的值”void“不能用于初始化我的主源文件中的”int“类型的实体。C++动态数组:无法使用“void”类型的值来初始化类型为“int”的实体

Main.cpp的(这是我得到的错误):

#include "dynamic.h" 

int main 
{ 
    readDynamicData("input.txt","output.txt"); 
} 

dynamic.cpp(骨架的程序):

#include "dynamic.h" 


void readDynamicData(string input, string output) 
{ 
    DynamicArray da; //struct in the header file 
    da.count = 0; 
    da.size = 5; //initial array size of 5 

    int *temp = da.theArray; 
    da.theArray = new int[da.size]; 


    ifstream in(input); 
    ofstream out(output); 

    in >> da.number; //prime read 
    while (!in.fail()) 
    { 
     if (da.count < da.size) 
     { 
      da.theArray[da.count] = da.number; 
      da.count++; 
      in >> da.number; //reprime 
     } 
     else grow; //if there are more numbers than the array size, grow the array 
    } 


    out << "Size: " << da.size << endl; 
    out << "Count: " << da.count << endl; 
    out << "Data:" << endl; 
    for (int i = 0; i < da.size; i++) 
     out << da.theArray[i]; 

    in.close(); 
    out.close(); 

    delete[] temp; 
} 


void grow(DynamicArray &da) //this portion was given to us 
{ 
    int *temp = da.theArray; 
    da.theArray = new int[da.size * 2]; 
    for (int i = 0; i<da.size; i++) 
     da.theArray[i] = temp[i]; 
    delete[] temp; 
    da.size = da.size * 2; 
} 

和dynamic.h中,头文件:

#include <iostream> 
#include <string> 
#include <fstream> 
#ifndef _DynamicArray_ 
#define _DynamicArray_ 


using namespace std; 

void readDynamicData(string input, string output); 

struct DynamicArray 
{ 
    int *theArray; 
    int count; 
    int size; 
    int number; 
}; 

void grow(DynamicArray &da); 

#endif 
+1

请编辑您的问题以提供[mcve]。 –

+0

我apogolize,但林不知道为什么这不符合最小和完整?我不确定为什么错误被触发,所以我发布了整个代码,因为它的代码是在三个文件中的任何一个。请让我知道如果这不是真的 – pbcrazy

+0

在头文件中使用名称空间标准是非常糟糕的东西 – Raindrop7

回答

0

main是一个函数所以它需要括号:

int main(){ 
    // your code 
    return 0; // because it should return intiger 
} 

而且。你的grow也是一个函数,所以如果你想要调用它,你可以写grow(),它需要DynamicArray作为参数。

不可能在上编写工作程序C/C++任何不知道基本语法的编程语言。

+0

显式'return 0'不是必需的在'main'中,这意味着上面的“因为它需要......”的评论并不准确。不,它并不是真的需要它。 – AnT

+0

@AnT真。感谢您的纠正。 –

+0

哇,这是一个主要的笔直的错字,不知道我可能错过了错过(),谢谢! – pbcrazy

0

你必须括号添加到主要或任何功能:

int main(){/*your code here ...*/}; 

2-您使用的是未初始化objct:

DynamicArray da; //struct in the header file 
da.count = 0; 
da.size = 5; //initial array size of 5 

所以INT * theArray是一个部件的数据和未初始化,以便欢迎来到段落

da的所有成员都没有被初始化,所以在使用它之前你必须做。

3-还添加括号成长功能:

else grow(/*some parameter here*/); // grow is a function 

4-在头文件using namespace std;是一个非常不好的做法。 提示内使用它

5-为什么包括iostream和字符串..在包含警戒之前? 将其更正为:

#ifndef _DynamicArray_ 
#define _DynamicArray_ 

#include <iostream> 
#include <string> 
#include <fstream> 

/*your code here*/ 

#endif 
相关问题