簡體   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