我发布了这个问题,因为我陷入了一个非常奇怪的问题。我有几个 .cpp 文件和几个标题的项目。特别是这段代码出现在三个不同的 .cpp 文件中:
void printGraph2d(std::vector < std::vector <plotData> > data, double dy, double dt, const unsigned int M, unsigned int intervalliTemporali);
void printGraph3d(std::vector < std::vector <plotData> > data, double dy, double dt, const unsigned int M, unsigned int intervalliTemporali);
double alpha = 0.000217f;
double hBarra = 0.04f;
double uWall = 100;
double dt = 0.0001f;
const unsigned int Y = 41;
const unsigned int M = 15000;
double dy = hBarra/(Y - 1);
double grid [M][Y];
std::vector <std::array <double, 4> > tridiagonal;
unsigned int intervalliTemporali;
并在每个文件中扮演不同的角色。我想知道为什么编译器让我出现“多重定义错误”。这两个函数原型和变量仅在 .cpp 文件中定义(不在任何头文件中),并且仅在声明它们的文件中使用。
我解决了这个错误,在声明之前加上了“静态”这个词,它工作得很好,但是我在调试器上遇到了一些问题(没有显示变量的值)。我发现如果我重命名上面的变量和函数,调试器的麻烦就会消失。我决定在函数内部而不是全局声明变量,而不是重命名变量。我没有重命名这些功能。这样做时,每次我在调用函数“cranknicolson1()”时突然调用它,然后在做任何事情之前,程序就会崩溃。我认为这种非常奇怪的行为是由函数原型之前的“静态”一词引起的,因为我无法解释!这是我的代码。http://qpwoei.altervista.org/Code.zip 我强调代码在执行任何操作之前在 crannicolson1() 中崩溃的事实!所以cranknicolson算法没有问题,但是别的。希望有人可以帮助我,非常感谢您!