gpt4 book ai didi

c++ - 获取符号错误 : 'ld: symbol(s) not found'

转载 作者:行者123 更新时间:2023-11-28 07:34:11 24 4
gpt4 key购买 nike

我正在尝试执行此代码,但出现标题的符号错误:

配置文件.cpp:

#include "configFile.h"
#include <iostream>
#include <sstream>
#include <fstream>
#include <cstdlib>
#include <stdexcept>
#include <map>

configFile* configFile::getInstance(){
pinstance = new configFile();
return pinstance;
}

configFile::configFile(){
filename = "/Users/myfolder/NetBeansProjects/Oier_2/config.cfg";
}

void configFile::setConfigFileName(std::string s){
filename = s;
}

float* getConfiguration(std::string type, int size) {
std::string data[size];
std::string line;
std::ifstream myfile("/Users/myfolder/NetBeansProjects/Oier_2/config.cfg");

while (std::getline(myfile, line)) {
std::istringstream is_line(line);
std::string key;
if (std::getline(is_line, key, '=')) {
if(key.compare(type) == 0){
for(int i=0; i<size;i++){
std::getline(is_line,data[i],',');
}
}
}
}

float *fdata;
for(int i=0;i<size;i++){
fdata[i] = (float)atof(data[i].c_str());
}
return fdata;
}

configFile.h:

#include <string>

#ifndef CONFIGFILE_H
#define CONFIGFILE_H

class configFile {

private:
static configFile* pinstance;
static std::string filename;
public:
static configFile* getInstance();
void setConfigFileName(std::string s);
float* getConfiguration(std::string type, int size);
protected:
configFile();
configFile(const configFile& orig);

};

#endif /* CONFIGFILE_H */

我遇到的符号错误:

Undefined symbols: "configFile::filename", referenced from: configFile::configFile()in configFile.o configFile::configFile()in configFile.o configFile::setConfigFileName(std::basic_string, std::allocator >)in configFile.o
"configFile::pinstance", referenced from: configFile::getInstance() in configFile.o
configFile::getInstance() in configFile.o "configFile::getConfiguration(std::basic_string std::char_traits, std::allocator >, int)", referenced from: _main in main.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

如果需要:ma​​in.cpp:

#include <cstdlib>
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <limits.h>
#include <algorithm>
#include "configFile.h"

using namespace std;

int main(int argc, char** argv) {
configFile* cfg = configFile::getInstance();

string type = "tiempo";
float* tiem = cfg->getConfiguration(type,3);

for(int i=0; i< 3;i++){
printf( " %f ", tiem[i]);
}
}

我运行的是 MaxOSX 10.6.8。提前致谢

最佳答案

这两个方面是问题所在:

configFile::configFile(){
filename = "/Users/myfolder/NetBeansProjects/Oier_2/config.cfg";
}

void configFile::setConfigFileName(std::string s){
filename = s;
}

您已将 filename 声明为静态数据成员,因此其名称必须始终为 configFile::filename。如果你打算使用数据成员,你可以简单地删除 static 定义。

静态数据成员和非静态数据成员的区别在于,对于静态数据成员,只有一个变量存在,而对于非静态数据成员,每个类都有一个该变量的实例。所以在这种情况下,结果是使用 static,configFile 的每个实例将引用相同的文件路径,而删除 static 将使每个 configFile 拥有自己的 filename 等都有自己的文件路径。

关于c++ - 获取符号错误 : 'ld: symbol(s) not found' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17047771/

24 4 0