Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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
如何使用作为参数传递的信息构建在其他CPP文件中定义的字符串 我有一个C++程序,它有几个.pp文件,它们有变量声明(大多数是NFS文件系统的路径)和.CPP文件,这些变量的定义是._C++ - Fatal编程技术网

如何使用作为参数传递的信息构建在其他CPP文件中定义的字符串 我有一个C++程序,它有几个.pp文件,它们有变量声明(大多数是NFS文件系统的路径)和.CPP文件,这些变量的定义是.

如何使用作为参数传递的信息构建在其他CPP文件中定义的字符串 我有一个C++程序,它有几个.pp文件,它们有变量声明(大多数是NFS文件系统的路径)和.CPP文件,这些变量的定义是.,c++,C++,在其中一些类型为std::string的变量中,我需要通过在主程序中附加一些作为参数传递的内容来构建其内容。例如: 文件常量.hpp: namespace constants { extern std::string cudnn_version; extern const std::string path_caffe_cuda; extern const std::string path_caffe_cuda_cudnn; } const std::string con

在其中一些类型为std::string的变量中,我需要通过在主程序中附加一些作为参数传递的内容来构建其内容。例如:

文件常量.hpp

namespace constants {
    extern std::string cudnn_version;
    extern const std::string path_caffe_cuda;
    extern const std::string path_caffe_cuda_cudnn;
}
const std::string constants::path_caffe_cuda = "/nfs/apps/caffe/cuda";
const std::string constants::path_caffe_cuda_cudnn = constants::path_caffe_cuda + "/cudnn" + constants::cudnn_version;
文件常量.cpp

namespace constants {
    extern std::string cudnn_version;
    extern const std::string path_caffe_cuda;
    extern const std::string path_caffe_cuda_cudnn;
}
const std::string constants::path_caffe_cuda = "/nfs/apps/caffe/cuda";
const std::string constants::path_caffe_cuda_cudnn = constants::path_caffe_cuda + "/cudnn" + constants::cudnn_version;
常量::cudnn_版本的内容在主程序中作为参数询问用户,并在主程序中更新。问题是,当constants::path\u caffe\u cuda\u cudnn变量必须使用constants::cudnn\u版本变量的内容构建时,其内容仍然为空,因此在某种程度上,在constants::cudnn\u版本具有用户传递的内容之前,会对变量path\u caffe\u cuda\u cudnn进行评估

你认为我如何解决这个问题


非常感谢大家。

使用函数即可轻松完成:

namespace constants {
    extern std::string cudnn_version;
    extern const std::string path_caffe_cuda;

    inline std::string path_caffe_cuda_cudnn()
    {
        return constants::path_caffe_cuda + "/cudnn" + constants::cudnn_version;
    }
}

只要
path\u caffe\u cuda\u cudnn
constants::cudnn\u version
初始化之前不被调用,那么它就可以了。

与其让它成为变量,不如让它成为一个构造并返回路径的函数?好吧,这是我认为的一种方法(我还有一些其他类似的例子),但在这种情况下,我无法避免将cudnn_version变量作为参数在主程序中传递。。。是否可以构造路径,其中一部分作为参数传递,另一部分从constants.cpp捕获?再次感谢,谢谢!不幸的是,它不起作用,至少在从constants.cpp文件调用函数时,它似乎再次在初始化constants::cudnn_版本之前评估变量的内容,我想我无法控制何时评估其内容。另一个选择是调用这个函数,只要我需要访问变量,我想它可以工作…@TonyD。如果两个变量都已初始化(这是重要的部分),那么它应该可以正常工作。如果一个或两个都没有初始化,那么它当然不会工作。看起来你需要重新思考你的设计。是的,这是重要的部分,也是问题的根源;)因为我需要在cpp文件中定义这些变量(因为有更多的变量是用它们构建的),所以我实际上不知道如何获得更好的设计。再次感谢你的帮助。