char变量尚未声明

时间:2017-09-29 06:34:31

标签: c++ variables code-splitting

昨天我试图将我的代码拆分成几个文件时遇到了问题。

昨天早上我的整个代码都在一个文件中,为了更容易跟踪所有内容,我想将代码拆分成更多文件。

这很顺利,直到我得到一个函数,我需要声明一个变量,虽然我已经有了(但可能在错误的地方)。

因为代码太长,我把所有文件都放到了pastebin。

我在main.cpp中声明了“field”:

char field[20][41];

此处的整个文件:https://pastebin.com/Jy1XvdpL

我想在field.cpp中使用它:

void loadLevel(int levelnumber) {

// concatenate leven base with level number
std::string level = "level" + std::to_string(levelnumber) + ".txt";

// print field
// load the text file
std::ifstream file;
file.open(level);
char c;

// read line by line, character by character and store it in field
for (int i = 0; i < 20; i++) {
    for (int j = 0; j < 41; j++) {
        file.get(c);
        field[i][j] = c;
    }
}
file.close();

}

field.h看起来像这样:

#ifndef field
#define field

#include <iostream>
#include <string>
#include <fstream>

void loadLevel(int levelnumber);
void drawField();

#endif // !field

问题是我不知道,在哪里定义char字段,因为如果在其中任何一个文件中完成,我会收到错误。那么我需要做些什么来使字段在field.cpp中工作并因此在我的主要工作?

P.S。这是我在c ++中的第一个程序,我每天都在学习新东西。我很欣赏任何关于如何更好地做某些事情的提示^^

亲切的问候, 本杰明

2 个答案:

答案 0 :(得分:0)

在主文件中声明变量时,您无法在其他文件中使用它。 (或至少很容易)

如果你想在field.cpp中使用你的字段变量,那么你可以在field.h中定义它。

此代码可以如下。

#ifndef field

maxdiff

虽然这不允许您使用分配给<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/gameCard" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="5dp" android:background="#00000000"> <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <!--Start Layout of the open items--> <LinearLayout android:id="@+id/customLevelLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:id="@+id/levelImage" android:layout_width="120dp" android:layout_height="120dp" android:layout_centerInParent="true" android:scaleType="fitXY" tools:background="@drawable/white_circular_background" /> <TextView android:id="@+id/levelNameText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:gravity="center" android:textSize="45sp" tools:text="1" /> </RelativeLayout> <TextView android:id="@+id/gameText" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:gravity="center" android:textColor="#000" tools:text="Tracing" /> </LinearLayout> <!--End Layout of the open items--> <ProgressBar android:id="@+id/gameProgressBar" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#fff" android:indeterminate="true" android:padding="45dp" /> <!--Lock image--> <LinearLayout android:id="@+id/lockImage" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="gone" android:orientation="vertical"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:layout_width="120dp" android:layout_height="120dp" android:layout_centerInParent="true" android:scaleType="fitXY" android:src="@drawable/lock_background" android:visibility="visible" /> </RelativeLayout> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:gravity="center" android:textColor="#000" tools:text="Tracing" /> </LinearLayout> </FrameLayout> </RelativeLayout> 的信息在主文件中不可用。

要做到这一点,我会在#define field #include <iostream> #include <string> #include <fstream> void loadLevel(int levelnumber); void drawField(); char field[20][41]; #endif // !field field[i][j]中创建一个返回field.h值的函数。

答案 1 :(得分:0)

您可以通过将函数作为参数传递给loadlevel函数来在函数中使用字段数组,如果要使用指针,也请检查this问题。 所以你的功能如下:

void loadLevel(int levelnumber,char field [] [41]);