我是C ++的新手,想要实现非常简单的东西,但它不会让我失望。我已经阅读了很多方法来“分配”或“链接”或“复制”数组,但这些方法似乎都没有。
请考虑以下事项:
文件中的:header.h
:
using namespace std;
Class Proc
{
public: static char args;
};
文件中的:main.cpp
:
using namespace std;
#include <cstdlib>
#include <memory>
#include "header.h"
int main(int argc, char* argv[])
{
Proc::args = argv; // yea i know this won't work :(
// Proc::args[argc] = argv; // not working either
// memcpy(argv, Proc::args, sizeof(argv)); // nope
// copy(begin(argv), end(argv), begin(Proc.args)); // nope
}
实际上我根本不想“复制”它,链接它很好,但是g ++编译器一直在我面前喋喋不休undefined reference to 'Proc::args'
谁知道还有什么。
我准备在我耳边钻,有人可以举个例子吗?
它不同于undefined reference to
'Proc :: args'because I also get:
错误:无效使用限定名称'Proc :: args'and also that it complains about
char ** &
char * not being the same...
- and when I add an asterisk to Proc's
char * args`然后它会抛出更多。
答案 0 :(得分:2)
如果我理解正确,您希望将命令行参数复制到某个变量中。
这是一种方法,即复制。也可以在原始数据上保存指针,但通常不值得努力。
struct Proc
{
std::vector<std::string> args;
Proc( int argc, char* argv[] )
{
for( size_t i=0; i<(size_t)argc; ++i )
args.push_back( argv[i] );
}
};
int main(int argc, char* argv[])
{
Proc cla( argc, argv ); // saves cl args into variable
for( const auto& c: cla.args ) // print out
std::cout << c << "\n";
}
附注:我不同意@ Sri.U的回答,不推荐在现代C ++中使用memcpy
。同样,由于库提供了更安全的容器(string
和vector
),因此也不鼓励使用原始数组。
答案 1 :(得分:1)
我认为您展示的示例代码中存在两个问题: -
char Proc::args = '\0'; int main(int argc, char* argv[]) { //Proc::args = argv; /* invalid conversion */ return 0; }
这将解决您未定义的引用问题。
Proc::args = argv;
进行从char **到char的无效转换,您可以使用static char **args
代替。答案 2 :(得分:0)
你可以:
public: static char args[NUM_ARGS][STRING_LENGTH];
然后你可以对每个参数进行memcpy,如下所示:
for (i=0; i < argc; i++) {
memcpy (argv[i], args[i], sizeof(argv[i])):
}
main函数argv中的参数是char指针数组。所以你有argc字符串数。
所以而不是
public: static char args[NUM_ARGS][STRING_LENGTH];
你也可以有一些指针数组,并在main中分配如下:
public: static char *args[STRING_LENGTH];
根据OP评论进行编辑:
如果你只想将它分配给args,那么你需要
public: static char **args;
答案 3 :(得分:0)
非常感谢大家的投入!
使用你教给我的东西,我是&#34; frankensteined&#34;答案&amp;一起评论并提出了一个有效的解决方案(下)
我希望这对某人有所帮助,并再次非常感谢你的所有努力。 请随意缩短代码,或使其更优雅。
文件中的:header.h
:
using namespace std;
class Proc
{
public: static char** args;
public: static void init(char* args[])
{
Proc::args = args;
};
};
char **Proc::args; // important!
文件中的:main.cpp:
using namespace std;
#include <iostream>
int main(int argc, char* argv[])
{
Proc::init(argv);
cout << Proc::args[0]; // works !!
}