【问题标题】:Migrating C++ code from VS to Xcode [duplicate]将 C++ 代码从 VS 迁移到 Xcode [重复]
【发布时间】:2015-05-23 21:13:54
【问题描述】:

我的代码在 Visual Studio 和 Windows 中运行良好,但在 Xcode 中我遇到了大问题。首先,我想知道在删除 direct.h 包含(在 Xcode、mac 中)后,我收到以下错误

此外,我创建的类中的对象(这与 direct.h 无关)都无法初始化。 Xcode 似乎不理解我的任何构造函数。错误消息如下所示。该示例适用于我的一个对象。有什么帮助吗?

这是我的一门课。请注意所有类都没有加载!!

class p_args{
    public:
        string ts,par,fxd,dir,dato;
        int diFL, RSQtype, runtype, *DATO;
        int Snow2GlacierOption,Snow2GlacierJulianDay,parallel;//Added 02-12-2012 (extra arguments in args.txt)
        int manual,nopt,nopt2,maxn,kstop;
        float pcento;
        p_args();~p_args();
        void getfnames(int);
    };
    p_args::p_args(){};
    p_args::~p_args(){};
    void p_args::getfnames(int plots){//read file names
        int i=0;
        this->DATO=new int[3];
        ifstream inFile;
        inFile.open("ARGS.txt",ios::in);
        if (inFile.is_open()){
            inFile>>this->dir;cout<<"Dir\t"<<this->dir<<"\n";
            inFile>>this->ts;cout<<"ts\t"<<this->ts<<"\n";
            inFile>>this->par;cout<<"par\t"<<this->par<<"\n";
            inFile>>this->fxd;cout<<"fxd\t"<<this->fxd<<"\n";
            inFile>>this->diFL; // multiple lapse
            inFile>>this->manual;//manual control of calib.
            inFile>>this->nopt;
            inFile>>this->nopt2;
            inFile>>this->maxn;
            inFile>>this->kstop;
            inFile>>this->pcento;
            inFile>>this->dato;cout<<lnz<<"BEGIN =\t"<<this->dato<<"\n";
            if(plots==1){   //Use with Grapher
                this->DATO = breakdotstring(dato);
                cout<<this->DATO[0]<<"-"<<this->DATO[1]<<"-"<<this->DATO[2]<<"\n";
                //cin.get();
            }
            inFile>>this->RSQtype;
            if(this->RSQtype==0){cout<<"RSQ = NASH SUTCLIFFE (NSEFF)"<<"\n";} else {cout<<"RSQ = NASH SUTCLIFFE *(1-VOLUMETRIC_ERROR)"<<"\n";}
            inFile>>this->runtype;
            if(this->runtype==0)cout<<"SIMULATING WITH GIVEN PARAMETERS\n";
            if(this->runtype==1)cout<<"PARAMETER STUDY RUN";
            if((this->runtype!=0) & (this->runtype!=1) ){cout<<"OPTIMISING RUN";}
            cout<<lnz;
            inFile>>this->Snow2GlacierOption;//Added 02-12-2012 (extra arguments in args.txt)
            cout<<this->Snow2GlacierOption<<"--Snow2GlacierOption\n";
            inFile>>this->Snow2GlacierJulianDay;//Added 02-12-2012 (extra arguments in args.txt)
            cout<<this->Snow2GlacierJulianDay<<"--Snow2GlacierJulianDay\n";
            if(this->Snow2GlacierOption==0)cout<<"Snow Storage On Julian Day["<<this->Snow2GlacierJulianDay<<"] Not Converted to Glacier\n";//Added 02-12-2012 (extra arguments in args.txt)
            if(this->Snow2GlacierOption==1)cout<<"Snow Storage On Julian Day["<<this->Snow2GlacierJulianDay<<"] Converted(Zeroed)\n";//Added 02-12-2012 (extra arguments in args.txt)
            cout<<lnz;//Added 02-12-2012 (extra arguments in args.txt)
            inFile>>this->parallel;//Added 02-12-2012 (extra arguments in args.txt)
            //cout<<this->parallel<<"-->1=Parallel/0=Serial Simulation\n";
            if(this->parallel==0)cout<<"SERIAL HBV SIMULATIONS\n";//Added 02-12-2012 (extra arguments in args.txt)
            if(this->parallel==1)cout<<"PARALLEL HBV SIMULATIONS\nEach simulation is 1 Hydrological year\n";//Added 02-12-2012 (extra arguments in args.txt)
            cout<<lnz;//Added 02-12-2012 (extra arguments in args.txt)
            inFile.close();
        }
    }

【问题讨论】:

  • @Cyber​​ 我会看看,因为这可能会回答第一部分,但可能不会回答我问题的第二部分。谢谢:)
  • 我们无法回答第二部分,因为我们没有p_args的构造函数的代码。
  • @Borgleader 我添加了我的一门课程。请注意,所有类在 Xcode 中都失败并出现相同的错误。我是否使用默认构造函数都没关系!我检查了包含的内容,它们没问题!!
  • 每个问题只能回答一个问题。
  • @peterchen 当我开始这个问题时,我认为这是将代码从 vc++ 迁移到 Xcode 的问题,因为代码在 Windows 中是可以的。问题不断演变,因此产生了混乱。

标签: c++ xcode


【解决方案1】:

我从https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/getcwd.3.html 找到了在 Xcode 中处理 getwcd 的方法。该解决方案类似于@Cyber​​ 建议的解决方案。我必须在头文件中进行以下更改;

//#include <direct.h> // for _getcwd WIN
#include <unistd.h> // for getcwd Mac

并使用

getcwd()

而不是

_getcwd() 

在我的功能中

void GetCurrentPath(char* buffer){getcwd(buffer,PATH_MAX);}

然后在我的函数 main() 中我使用了

//Curent path
    char current_path[PATH_MAX]; //CurrentPath[_MAX_PATH]; windows
    GetCurrentPath(current_path);
    cout << current_path << endl;

我的问题的第二部分是通过查看头文件来解决的。我曾使用 Xcode 创建空头文件 hbv.h,然后我错误地将我在 VC++ 中使用的旧 hbv.h 文件中的代码粘贴到 #endif 下方而不是 #endif 上方

    #ifndef hbvOptimMAC_hbv_h
    #define hbvOptimMAC_hbv_h
    //<code defining classes was correctly pasted here>
    #endif
    //<code defining classes initially mistakenly pasted here>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    • 2012-02-27
    相关资源
    最近更新 更多