调试中未定义的引用,但在发布中可以

时间:2016-09-25 12:40:37

标签: c++

我遇到了一个奇怪的问题。我的代码在 Release 版本中完美运行,但无法在 Debug 中编译。与通常存在的问题完全相反。 :)

在* .h文件中我有一个常量:

class OBDenrChrg : public OBChargeModel
{
public:
  bool ComputeCharges(OBMol &mol);
// blah-blah-blah
private:
  static const float c = 0.05;
};

在* .cpp文件中我使用这个常量:

bool OBDenrChrg::ComputeCharges(OBMol &mol)
{
// blah-blah-blah
  Eigen::VectorXf a0 = L*EN*c;
  Eigen::SparseMatrix<float> A = L*HRD*c + I;
// blah-blah-blah
}

构建由cmake控制。 Release 目标构建并运行良好。 Debug 表示:

CMakeFiles/plugin_charges.dir/charges/denr.o: 
In function `OpenBabel::OBDenrChrg::ComputeCharges(OpenBabel::OBMol&)':
/home/titov/openbabel-2.3.2/src/charges/denr.cpp:181: undefined reference to `OpenBabel::OBDenrChrg::c'
/home/titov/openbabel-2.3.2/src/charges/denr.cpp:182: undefined reference to `OpenBabel::OBDenrChrg::c'

我在这些文件中没有 #ifdef DEBUG 或类似的开关。

有关如何解决问题以及可能导致问题的任何想法?

修改

感谢大家的帮助。 问题出现在c定义的绝对位置,因为staticclass成员的声明 &#39; 定义不会定义 static成员。多么糟糕......

0 个答案:

没有答案