昨天我试图将我的代码拆分成几个文件时遇到了问题。
昨天早上我的整个代码都在一个文件中,为了更容易跟踪所有内容,我想将代码拆分成更多文件。
这很顺利,直到我得到一个函数,我需要声明一个变量,虽然我已经有了(但可能在错误的地方)。
因为代码太长,我把所有文件都放到了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 ++中的第一个程序,我每天都在学习新东西。我很欣赏任何关于如何更好地做某些事情的提示^^
亲切的问候, 本杰明
答案 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]);