如何在 C++ 中定义字符串常量?

发布于 2024-12-06 18:40:55 字数 680 浏览 0 评论 0原文

可能的重复:
C++ 静态常量字符串(类成员)
静态常量 C++ 类成员已初始化链接时出现重复符号错误

我使用 C++ 的经验早于添加字符串类,因此我在某些方面重新开始。

我正在为我的类定义头文件,并希望为 url 创建一个静态常量。我正在尝试执行以下操作:

#include <string>
class MainController{
private:
    static const std::string SOME_URL;
}

const std::string MainController::SOME_URL = "www.google.com";

但这在链接期间给了我一个重复的定义。

我怎样才能做到这一点?

Possible Duplicate:
C++ static constant string (class member)
static const C++ class member initialized gives a duplicate symbol error when linking

My experience with C++ pre-dated the addition of the string class, so I'm starting over in some ways.

I'm defining my header file for my class and want to create a static constant for a url. I'm attempting this by doing as follows:

#include <string>
class MainController{
private:
    static const std::string SOME_URL;
}

const std::string MainController::SOME_URL = "www.google.com";

But this give me a duplicate definition during link.

How can I accomplish this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

心如荒岛 2024-12-13 18:40:55

将其

const std::string MainController::SOME_URL = "www.google.com";

移至 cpp 文件。如果您将其放在标头中,则包含它的每个 .cpp 都会有一个副本,并且您将在链接期间收到重复符号错误。

Move the

const std::string MainController::SOME_URL = "www.google.com";

to a cpp file. If you have it in a header, then every .cpp that includes it will have a copy and you will get the duplicate symbol error during the link.

给不了的爱 2024-12-13 18:40:55

由于

const std::string MainController::SOME_URL = "www.google.com";

单一定义规则。事实上,您不能直接在类中初始化它,因为 std::string 不是整型(如 int)。

或者,根据您的用例,您可能会考虑不创建静态成员,而是使用匿名命名空间。 请参阅这篇文章了解优点/缺点

You need to put the line

const std::string MainController::SOME_URL = "www.google.com";

in the cpp file, not the header, because of the one-definition rule. And the fact that you cannot directly initialize it in the class is because std::string is not an integral type (like int).

Alternatively, depending on your use case, you might consider not making a static member but using an anonymous namespace instead. See this post for pro/cons.

像你 2024-12-13 18:40:55

在头文件中定义类:

//file.h
class MainController{
private:
    static const std::string SOME_URL;
}

然后在源文件中:

//file.cpp
 #include "file.h"

const std::string MainController::SOME_URL = "www.google.com";

Define the class in the header file:

//file.h
class MainController{
private:
    static const std::string SOME_URL;
}

And then, in source file:

//file.cpp
 #include "file.h"

const std::string MainController::SOME_URL = "www.google.com";
向日葵 2024-12-13 18:40:55

您应该将 const std::string MainController::SOME_URL = "www.google.com"; 定义放入单个源文件中,而不是放在标头中。

You should put the const std::string MainController::SOME_URL = "www.google.com"; definition into a single source file, not in the header.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文