我正在尝试编写文件管理器,并希望使用包含子文件夹数组的文件夹。
我在考虑像
这样的东西struct folder {
char* name;
struct folder subfolders [10];
}
这有可能吗?
答案 0 :(得分:4)
不,struct
类型不可能包含相同类型的数组(因为该类型通常被诊断为不完整)。此外,如果该类型的每个变量都包含一个或多个相同类型的成员,则类型定义将是无限递归的(包含A的A包含A .....)。
但是,struct
类型可以包含指针
struct folder1
{
char* name;
struct folder1 *a_subfolder;
};
或指针数组
struct folder2
{
char* name;
struct folder2 *subfolders [10];
};
在这两种情况下,使用这些类型的代码都需要注意确保指针是正确初始化的,并且它们可以合理地工作(例如,不尝试访问未初始化指针的值,而不是取消引用NULL等) 。在使用这种构造之前阅读指针 - 指针错误通常意味着程序以可怕的方式崩溃。
答案 1 :(得分:0)
08-10 16:04:29.696 2567-2567/sg.edu.tp.project1 E/AndroidRuntime: FATAL EXCEPTION: main
Process: sg.edu.tp.project1, PID: 2567
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22429)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22429)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.MediaPlayer.start()' on a null object reference
at sg.edu.tp.project1.PlayMusicActivity.playOrPauseMusic(PlayMusicActivity.java:106)
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22429)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
对于每个@Peter精确答案是不可能的,因为struct folder {
char* name;
struct folder subfolders [10]; // bad
}
在需要完整定义之前尚未完全定义。
`
这有可能吗?
是的,考虑动态分配:
创建功能以创建,添加子文件夹和删除。可能有许多改进。
struct folder
答案 2 :(得分:-1)
简短的回答是肯定的,这样的效果可行。您可能需要添加struct folder parentfolder
,以便向上和向下导航。