麻烦将指针数组传递给函数

Jon*_*Jon 0 c++ arrays pointers function vector

在我正在处理的程序中,我有一个模板函数,该函数包含在一个单独的.h文件中,该文件从.txt文件中读取五列数据.数据传递给主程序,在这种情况下,我只关心数组标题"MISC_DATA".我试图确定数组"MISC_DATA"中的最大值,并编写了另一个必须传递数据的函数,以确定这一点.但是,编译器告诉我它无法识别函数调用"Maximum_Value".我很确定它在例程调用中包含的变量MISC_DATA存在问题,而不是函数本身.要么它不能将MISC_DATA识别为数组,要么我的语法错误.我只包含重要的代码片段,以使其更具可读性.Read_Five_Columns函数工作正常,它是函数"Maximum_Value",由于指针数组MISC_DATA在主程序中的写入方式,编译器无法识别该函数.为了澄清,函数调用中的变量MISC_DATA是包含数组的float,变量"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;
}
Run Code Online (Sandbox Code Playgroud)

cdh*_*wie 6

我在这里看到四个问题.

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

#include "Use_RNG.h"
#include "Read_Columnar_File.h"
#include <fstream>
#include <iostream>
Run Code Online (Sandbox Code Playgroud)

所有这些东西都是错误的顺序.您不应该将系统头文件包含在函数体中,并且通常在其他内容之前包含标准库.将其修改为如下所示:

#include <fstream>
#include <iostream>

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

int main(int argc, const char * argv[]) {
Run Code Online (Sandbox Code Playgroud)

其次,Maximum_Value在使用之前不要申报.您需要在定义之前移动此函数的定义,main()或者您需要在之前添加原型main():

int Maximum_Value(float *array,int array_size);

int main(int argc, const char * argv[]) {
Run Code Online (Sandbox Code Playgroud)

然后,你试图传递一个std::vector<float>float*不工作:

value = Maximum_Value(MISC_DATA,size_Mis);
Run Code Online (Sandbox Code Playgroud)

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

value = Maximum_Value(&MISC_DATA[0],size_Mis);
Run Code Online (Sandbox Code Playgroud)

最后,你应该回来intMaximum_Value时候回来float.


如果可能,我会建议杠杆作用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());
Run Code Online (Sandbox Code Playgroud)

现在max是一个迭代最大的元素,所以*max将是最大的float本身.

(如果输入范围为空,那么max将等于MISC_DATA.end(),所以相当于你的函数value = max == MISC_DATA.end() ? 0f : *max;.)