Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 获取符号错误:';ld:找不到符号';_C++_Symbols - Fatal编程技术网

C++ 获取符号错误:';ld:找不到符号';

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(){

我试图执行此代码,但我得到标题的符号错误:

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;
}
#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;
}