【发布时间】:2014-03-25 03:31:33
【问题描述】:
我发布了这个问题,因为我遇到了一个非常奇怪的问题。 我有几个 .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 我强调了代码在执行任何操作之前在cranknicolson1() 中崩溃的事实!所以cranknicolson算法没有问题,但是别的。 希望有人可以帮助我,非常感谢您!
【问题讨论】:
-
您的函数
cranknicolson1的问题与此问题不同。作为一个单独的问题提出。 -
感谢您的建议,我已经创建了另一个主题:stackoverflow.com/questions/21971827/…希望您能帮助我!
标签: c++ visual-studio-2012 multiple-definition-error