比我尝试使用函数初始化数组时,Visual Studio中出现“此声明没有存储类或类型说明符”错误。
我在 header 中声明一个数组:
typedef void (*MultimethodFunc)(ofstream& out);
extern MultimethodFunc multimethodFunc[][10];
在.cpp文件中,我有这个:
MultimethodFunc multimethodFunc[10][10];
最后,我尝试在另一个.cpp中初始化它:
void TrainTrainOut(ofstream& out) {
out << "\nTrain and Train" << endl;
}
void MMTrainTrainOut(ofstream& out) {
return TrainTrainOut(out);
}
multimethodFunc[1][1] = MMTrainTrainOut;
multimethodFunc[1][2] = MMTrainAirplaneOut;
multimethodFunc[2][1] = MMAirplaneTrainOut;
multimethodFunc[2][2] = MMAirplaneAirplaneOut;
另一个功能与TrainTrainOut和MMTrainTrainOut类似,但功能不同, yield 也匹配。错误放在最后一个字符串中,我尝试将功能分配给arrray。我在这种情况下做错了什么?
谢谢!
最佳答案
您不能将分配放在文件范围内。
以下程序给出错误:
this declaration has no storage class or type specifier
#include <fstream>
using namespace std;
typedef void (*MultimethodFunc)(ofstream& out);
void TrainTrainOut(ofstream& out) {
out << "\nTrain and Train" << endl;
}
void MMTrainTrainOut(ofstream& out) {
return TrainTrainOut(out);
}
MultimethodFunc multimethodFunc[10][10];
multimethodFunc[1][1] = MMTrainTrainOut; /* ERROR HERE */
multimethodFunc[1][2] = MMTrainTrainOut;
multimethodFunc[2][1] = MMTrainTrainOut;
multimethodFunc[2][2] = MMTrainTrainOut;
int main() {
}
以下程序进行编译。它通过将分配移到初始化函数中并在某处(例如:main)显式调用初始化函数来解决此问题。
#include <fstream>
using namespace std;
typedef void (*MultimethodFunc)(ofstream& out);
void TrainTrainOut(ofstream& out) {
out << "\nTrain and Train" << endl;
}
void MMTrainTrainOut(ofstream& out) {
return TrainTrainOut(out);
}
MultimethodFunc multimethodFunc[10][10];
void initializeThings() {
multimethodFunc[1][1] = MMTrainTrainOut;
multimethodFunc[1][2] = MMTrainTrainOut;
multimethodFunc[2][1] = MMTrainTrainOut;
multimethodFunc[2][2] = MMTrainTrainOut;
}
int main() {
initializeThings();
}
关于c++ - 无法分配功能指针的2D数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59639551/