C++ 获取符号错误:';ld:找不到符号';
我试图执行此代码,但我得到标题的符号错误: configfile.cpp:C++ 获取符号错误:';ld:找不到符号';,c++,symbols,C++,Symbols,我试图执行此代码,但我得到标题的符号错误: configfile.cpp: #include "configFile.h" #include <iostream> #include <sstream> #include <fstream> #include <cstdlib> #include <stdexcept> #include <map> configFile* configFile::getInstance(){
#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;
}
#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.h”
#包括
#包括
#包括
#包括
#包括
#包括
configFile*configFile::getInstance(){
pinstance=newconfigfile();
回程站姿;
}
configFile::configFile(){
filename=“/Users/myfolder/NetBeansProjects/Oier_2/config.cfg”;
}
void configFile::setConfigFileName(std::string s){
filename=s;
}
float*getConfiguration(标准::字符串类型,整数大小){
std::字符串数据[大小];
std::字符串行;
std::ifstream myfile(“/Users/myfolder/NetBeansProjects/Oier_2/config.cfg”);
while(std::getline(myfile,line)){
std::istringstream是_线(线);
std::字符串键;
if(std::getline(is_-line,key,'=')){
if(键比较(类型)==0){
用于(int i=0;igetConfiguration(类型3);
对于(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
,从而拥有自己的文件路径。我已经从configFile.h文件configFile*pinstance;
和configFile*getInstance();
中删除了静态信息,但我在(main.cpp)上遇到了以下错误行configFile*cfg=configFile::getInstance();
。这是错误:main.cpp:47:错误:无法调用成员函数'configFile*configFile::getInstance()'没有对象
@Borja,同样的逻辑也适用于静态函数。静态变量和方法不属于类的给定实例。你也需要删除它。你能更具体一点吗?我已经从configFile.cpp
和configFile.h
文件中删除了所有的static
,但我仍然有g在main.cpp
@Borja中也出现了同样的错误。好的,我对代码进行了更深入的阅读。getInstance
目前正在做两件事:分配一个静态成员变量并分配一个指向它的新指针。如果您确实希望存在一个静态实例,这是可以的,但在代码中您需要将其称为confIgFiels::pStase< /Calp>。如果您想完全消除<代码>静态<代码>,那么被调用的<代码> GETSimule CaseFix*。我想您现在的模式是……我上面链接的答案提供了一些在C++中实现单体的好的阅读。
configFile::configFile(){
filename = "/Users/myfolder/NetBeansProjects/Oier_2/config.cfg";
}
void configFile::setConfigFileName(std::string s){
filename = s;
}