繁体   English   中英

无法将指针数组传递给函数

[英]Trouble passing a pointer array to a function

在当前正在使用的程序中,我有一个模板功能,该功能包含在单独的.h文件中,该文件从.txt文件中读取五列数据。 数据被传递到主程序,在这种情况下,我只关心数组标题“ MISC_DATA”。 我试图确定数组“ MISC_DATA”中的最大值,并编写了另一个必须将数据传递给它的函数,以确定该值。 但是,编译器告诉我它无法识别函数调用“ Maximum_Value”。 我很确定它在例程调用中包含的变量MISC_DATA而不是函数本身存在问题。 它不能将MISC_DATA识别为数组,或者语法错误。 我只包含重要的代码片段以使其更具可读性。 Read_Five_Columns函数可以正常工作,它是函数“ Maximum_Value”,由于在主程序中如何编写指针数组MISC_DATA,编译器无法识别该函数。 为了澄清起见,函数调用中的变量MISC_DATA是一个包含数组的浮点数,而变量“ size_Mis”是一个包含数组大小的整数。 任何想法将不胜感激。

int main(int argc, const char * argv[]) {

#include "Use_RNG.h"
#include "Read_Columnar_File.h"
#include <fstream>
#include <iostream>

 std::vector<std::string> str3;
 std::vector<int> str4;
 std::vector<char> str5;
 std::vector<int> str6;

    unsigned long size_Mis;
    std::vector<float> MISC_DATA;  // Reads in Misc. spending data
    char File1[8];
    strcpy(File1, "Misc.txt");
    Read_Five_Columns(File1,MISC_DATA,str3,str4,str5,str6);
    str3.clear(); str4.clear(); str5.clear(); str6.clear();
    size_Mis = MISC_DATA.size();

float value;
value = Maximum_Value(MISC_DATA,size_Mis);

end_time = clock();
std::cout << std::endl << "Total Time: " << (end_time-start_time)/CLOCKS_PER_SEC << std::endl;
return 0;
}

int Maximum_Value(float *array,int array_size)
{
    float max = 0;
   for(int i =10; i < array_size-1; i++)
   {
        if(array[i] > max) max = array[i];
   }
    return max;
}

我在这里看到四个问题。

int main(int argc, const char * argv[]) {

#include "Use_RNG.h"
#include "Read_Columnar_File.h"
#include <fstream>
#include <iostream>

所有这些东西的顺序都不正确。 您不应将系统头文件包含在函数主体中,并且通常在其他内容之前包含标准库内容。 修复如下:

#include <fstream>
#include <iostream>

#include "Use_RNG.h"
#include "Read_Columnar_File.h"

int main(int argc, const char * argv[]) {

其次,在使用前不要声明Maximum_Value 您需要将该函数的定义移到main()的定义之前,或者需要在main()之前添加一个原型:

int Maximum_Value(float *array,int array_size);

int main(int argc, const char * argv[]) {

然后,您尝试将std::vector<float>传递为不起作用的float*

value = Maximum_Value(MISC_DATA,size_Mis);

但是,由于可以保证向量的存储是连续的并且像数组一样进行布局,因此可以安全地将指针传递给第一个成员:

value = Maximum_Value(&MISC_DATA[0],size_Mis);

最后,当您可能应该返回float时,将从Maximum_Value返回int


如果可能的话,我建议利用std::max_element ,它是标准<algorithm>标头的一部分:

// If you don't have C++11 then use std::vector<float>::iterator instead of auto.
auto max = std::max_element(MISC_DATA.begin(), MISC_DATA.end());

现在max是最大元素的迭代器,因此*max本身就是最大float

(如果输入范围为空,则max等于MISC_DATA.end() ,因此等效于您的函数的value = max == MISC_DATA.end() ? 0f : *max;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM