【问题标题】:How to read input from header file? [closed]如何从头文件中读取输入? [关闭]
【发布时间】:2014-10-21 09:34:14
【问题描述】:

我有一个头文件 abc.h

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

现在,我想将这个输入(来自头文件,而不是来自某个文本文件)读入我的主 cpp 文件,比如 xyz.cpp

我正在考虑使用数组来访问这些元素,但我认为它不会起作用。

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

第一个元素是测试用例的数量n,第二个和第三个元素是二维数组的维度,其余元素是二维数组的值。所以我需要输入n的值,行, 2D 数组的列和值 arr[rows][columns]

关于如何实现这一点的任何想法?

编辑:我真的无法弄清楚为什么这个问题被否决了。 我同意这不是一个好的实现,但我得到了一个输入头文件,我只能通过这个头文件读取数据!!

【问题讨论】:

  • 不要将函数实现放在头文件中。
  • 我同意,但是我已经获得了这个外部输入文件,读取输入的唯一方法是通过这个文件
  • 将函数放在头文件中的想法,返回指向私有数据的指针的想法,都表明程序设计存在根本缺陷。您需要指出,编写此代码的人是不称职的,他们的程序需要修复。不要试图通过将这些糟糕的代码包装在更糟糕的代码中来解决这个问题。
  • @techriften - 看起来有错别字,get() 函数返回 data 但有一个名为 input 的静态数组:最后一行应该是 return input; 吗?还是您编辑了一些内容?
  • 至于否决票,可能是因为您在网站上倾倒了一些未格式化、未缩进、没有意义且无法编译的代码。

标签: c++ c input header-files


【解决方案1】:

如果你能用这个文件编译你的程序,你不需要读取任何东西。这个数组和它的值将被编译到你的程序中,你可以就地访问它们

您的 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;
}

另外,你应该记住,这个技巧只有在头文件中的数组声明为 static 时才有效。否则你的程序会有未定义的行为。

还有一个。如果你的函数体定义在头文件中,你应该声明它inline。 只要此标头仅包含在一个 cpp 文件中 - 就可以了。但是当它包含到多个代码文件中时,你会得到已经定义链接器错误。

我建议您了解有关 cpp 中指针的更多信息。这篇文章就够了http://www.cplusplus.com/doc/tutorial/pointers/

关于静态关键字 - 完全理解这个例子 - SO 本身有很好的答案 The static keyword and its various uses in C++

【讨论】:

  • 谢谢!!!这就是我正在寻找的。人们可以实际回答这个问题,而不是投反对票。无论如何,谢谢:)
  • 这个问题表明,您实际上并没有尝试自己找到答案。我提供的那些链接几乎是谷歌查询“c++ 指针”、“c++ 静态”的第一个结果。这就是使您的问题被否决的原因。无论如何,我希望我的回答是有用的:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-09
  • 1970-01-01
相关资源
最近更新 更多