库中的c ++常量;不起作用

时间:2009-05-13 10:48:03

标签: c++ const

当我尝试使用以下声明包含库时,任何人都知道为什么这不起作用:

namespace wincabase
{
  const char* SOMESTRING = "xx";
}

虽然这很好:

namespace wincabase
{
  const int X = 30;
}

当我链接lib时,第一种情况下gcc出现“多个定义”错误。谢谢!

4 个答案:

答案 0 :(得分:5)

const char *表示指向const char的指针。这意味着指针本身常量。

因此它是一个普通变量,所以你需要使用

extern const char* SOMESTRING;
头文件中的

const char* SOMESTRING = "xx";

在库的一个编译单元中。


或者,如果它是一个指向const char的 const 指针,那么你应该使用:

const char* const SOMESTRING = "xx";

答案 1 :(得分:2)

您将指针声明为const,然后将其指向编译单元中定义的字符串文字,因此如果您在头文件中使用此字符串,则会复制字符串文字。您需要做的是在头文件中声明指针,并在库中的源文件中定义字符串。

部首:

extern const char* SOMESTRING;

在库中的某个源文件中:

const char* SOMESTRING = "xx";

答案 2 :(得分:2)

除了托比指出的方法:

const char* const SOMESTRING = "xx";

另一种方法是将其声明为 const 字符数组

const char SOMESTRING[] = "xx";

这种方法可能为编译器提供额外的优化机会,例如将字符串放在生成的二进制文件的只读部分中;虽然可以想象编译器可能能够使用第一种方法执行类似的优化。

答案 3 :(得分:1)

您需要分别声明和定义它们:

Plop.h
======
namespace wincabase
{
   extern const char* SOMESTRING;  // declare
}

Plop.cpp
========
const char* wincabase::SOMESTRING = "xx"; // define