2014-10-21 1 views
-4

У меня есть файл заголовок abc.hКак читать ввод из файла заголовка?

//abc.h 
unsigned int *get(void) 
{ 
    static unsigned int input[] = 
    { 
     1, 
     2, 2, 
     4, 5, 
     6, 7 
    }; 
return input; 
} 

Теперь я хочу прочитать этот вход (из заголовка файла, а не из какого-то текстового файла) в моем главный файл CPP сказать xyz.cpp

I я думаю об использовании массива для доступа к этим элементам, но я не думаю, что это сработает.

int arr[6]; 
arr=get(); 

Первым элементом является число тестов п, второй и третий элемент являются размеры 2-D массива и остальных элементов значения 2-D array.So мне нужно входного значения из n, строк, столбцов и значений для 2D-массива arr [rows] [columns]

Любые идеи о том, как я могу это достичь?

EDIT: Я всерьез не могу понять, почему этот вопрос получает downvoted. Я согласен, что это не очень хорошая реализация, но мне был предоставлен входной файл заголовка, и я могу читать данные только через этот файл заголовка !!

+3

Не помещайте реализации функций в заголовочных файлах. –

+0

Согласен, но мне предоставлен этот внешний входной файл, и единственный способ прочитать ввод через этот файл – techriften

+0

Зачем использовать массив? Если эти целые числа имеют какой-либо смысл, вы должны подумать о написании класса для их хранения. – user657267

ответ

3

Если вы в состоянии скомпилировать свою программу с этим файлом, вам не нужно читать что угодно. Этот массив и значения будет собран в вашу программу, и вы можете получить доступ к ним прямо на месте

Вашего файл xyz.cpp должен выглядеть следующим образом:

#include "abc.h" // given abc file located in the same directory 

int main(){ 
    unsigned int * myArrayPtr = get(); 
    // here comes some processing and, if you want, reading values from this array; 
    unsigned int numberOfCases = myArrayPtr[0]; 

    unsigned int * dimensionsArrayPtr = myArrayPtr + 1; 
    unsigned int xArraySize = dimensionsArrayPtr[0]; 
    unsigned int yArraySize = dimensionsArrayPtr[1]; 

    // and etc. 
    // Most interesting part to represent those values as two dimensional array 
    // I left to you :)  
    return 0; 
} 

Кроме того, вы должны что помните трюк может работать только потому что массив в файле заголовка объявлен как статический. В противном случае ваша программа будет иметь неопределенное поведение.

Еще один. Если тело функции определено в файле заголовка, вы должны объявить его inline. Пока этот заголовок включен только в один файл cpp - все в порядке. Но когда он будет включен в более один файл кода, вы получите уже установленный ошибка компоновщика.

Я рекомендую вам узнать больше о указателях в cpp. Эта статья является достаточно http://www.cplusplus.com/doc/tutorial/pointers/

штрафа О статическом ключевом слове - чтобы полностью понять этот пример - есть прекрасный ответ на SO самого The static keyword and its various uses in C++

+0

Спасибо !!! Это то, что я смотрел. Вместо того, чтобы ниспровергать, люди могли бы ответить на этот вопрос. Anyways, спасибо :) – techriften

+0

Этот вопрос показывает, что вы на самом деле не пытались найти ответ самостоятельно. Те ссылки, которые я предоставил, являются почти первыми результатами в google по запросам «указатели C++», «C++ static». Именно это заставило ваш вопрос подавить. Во всяком случае, я надеюсь, что мой ответ полезен :) –