gpt4 book ai didi

c++ - 在 C++ 中使用静态属性?

转载 作者:行者123 更新时间:2023-11-30 04:29:44 25 4
gpt4 key购买 nike

我有一个任务,我需要从不同的文档中读取单词并将它们存储在一个字符串 vector 中,我将这个 vector 设置为静态的,这样每个文档都会将他们的单词添加到 vector 中,这样我就可以有一个列表所有的话。我制作了一个文档类,并在标题中写道:

class document {
public:

document(string filename);

static vector<string> words;
string name;
vector<int> frequency;
void getFrequency();
static void addWord(string wordd);

在 document.cpp 文件中使用以下代码实现了 addWord 方法:

 static void  document::addWord(string wordd){


vector<string>::iterator i = find(words.begin(), words.end(), wordd);

if (i == words.end()) {
words.push_back(wordd);
}
}

但是这不起作用,每次我尝试构建代码时它都会给我这个错误消息

"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf "/usr/bin/make"  -f nbproject/Makefile-Debug.mk dist/Debug/GNU-MacOSX/assignment1 mkdir -p build/Debug/GNU-MacOSX rm
-f build/Debug/GNU-MacOSX/main.o.d g++ -c -g -MMD -MP -MF build/Debug/GNU-MacOSX/main.o.d -o build/Debug/GNU-MacOSX/main.o main.cpp mkdir -p dist/Debug/GNU-MacOSX g++ -o dist/Debug/GNU-MacOSX/assignment1 build/Debug/GNU-MacOSX/main.o Undefined symbols for architecture x86_64: "document::words", referenced from:
document::getFrequency() in main.o
document::addWord(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)in main.o ld: symbol(s) not found for architecture x86_64 collect2: ld returned 1 exit status make[2]: *** [dist/Debug/GNU-MacOSX/assignment1] Error 1 make[1]: *** [.build-conf] Error 2 make: *** [.build-impl] Error 2


BUILD FAILED (exit value 2, total time: 1s)

最佳答案

此错误消息的直接错误是您已声明 document::words 但尚未定义它。 this 的定义在类定义之外,通常在类的翻译单元中。您需要具有如下所示的定义:

static std::vector<std::string> document::words;

也就是说,请不要说静态数据很像稍微更好控制的全局数据。特别是对于具有所有对象共享的任何内容的并发程序来说,这是一个坏主意。如果这个东西是可变的,那是一个更糟糕的想法(顺便说一句,如果全局数据被称为“单例”,这也适用:仅仅因为某些东西据称是一种设计模式并不意味着它在某种程度上得到了祝福并且问题消失了离开)。

关于c++ - 在 C++ 中使用静态属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9163424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com