我正在尝试执行此代码,但出现标题的符号错误:
configfile.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 */
我遇到的符号错误:
未定义的符号:“ configFile :: filename”,引用自:
configFile.o中的configFile :: configFile()
configFile.o中的configFile :: configFile()
configFile.o中的configFile :: setConfigFileName(std :: basic_string,std :: allocator>)
“ configFile :: pinstance”,引用自:
configFile.o中的configFile :: getInstance()
configFile.o中的configFile :: getInstance()“ configFile :: getConfiguration(std :: basic_string
std :: char_traits,std :: allocator>,int)“,已引用
从:
_main在main.o中
ld:找不到符号
collect2:ld返回1退出状态
如果有必要:main.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
定义。静态数据成员和非静态数据成员之间的区别在于,使用静态数据成员时,仅存在一个变量,而使用非静态数据成员时,每个类都有该变量的一个实例。因此,在这种情况下,结果是使用静态文件,每个
configFile
实例将引用相同的文件路径,而删除静态文件将使每个configFile
拥有自己的filename
并具有自己的文件路径。