将参数数组分配给头文件中定义的类属性(数组)
assign arguments array to class property (array) defined in header file
我是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",然后它会抛出更多。
如果我理解正确,您希望将命令行参数复制到某个变量中。
有一种方法可以做到这一点,那就是复制。也可以在原始数据上保存指针,但这通常不值得。
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
)。
我认为您显示的示例代码中存在两个问题:-
- 静态应该在声明后初始化,在类之外-
char Proc::args = ' '; int main(int argc, char* argv[]) { //Proc::args = argv; /* invalid conversion */ return 0; }
这将解决您未定义的引用问题。
- 通过执行
Proc::args = argv;
,您正在执行从char**到char的无效转换,您可以使用static char **args
您可以拥有:
public: static char args[NUM_ARGS][STRING_LENGTH];
然后您可以对每个参数执行memcpy,如下所示:
for (i=0; i < argc; i++) {
memcpy (argv[i], args[i], sizeof(argv[i])):
}
主函数argv中的参数是字符指针数组。所以你有argc数量的字符串。
所以不是
public: static char args[NUM_ARGS][STRING_LENGTH];
您还可以拥有指针数组,并在main中进行分配,如下所示:
public: static char *args[STRING_LENGTH];
根据OP注释进行编辑:如果你只想把它分配给args,那么你需要有
public: static char **args;
非常感谢大家的投入!
用你教我的,我"弗兰肯斯坦"的答案&评论在一起,并提出了一个可行的解决方案(如下)
我希望这能帮助到别人,再次非常感谢你的努力。请随意缩短代码,或使其更优雅。
在文件中: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 !!
}
- 通过指向指针数组的指针访问子类的属性
- 如何在 C++ 中使用提升属性树从 JSON 文件中读取对象数组
- C++ 为什么数组没有长度属性
- 在C++中循环数组时访问结构属性
- 如何使用 boost 属性树来解析 boost 中 json 字符串中的数组中的元素?
- 访问用户定义类型的数组的特定属性
- 如何从对象数组中提取属性数组?
- 如何从类中返回自定义数组项目并操纵其属性?C
- 从C 读取QML数组属性
- 在不同的类C++中构造类属性数组
- 哪个更快,单个对象数组或多个数据属性数组
- 私有属性C++上的动态二维数组
- 只有Arduino的第一个对象在包含在另一个对象的集合/数组中时会丢失其数据属性值
- 为什么我不能更改结构的字符数组属性?
- 如何使用C Win32 API设置和获取多个值(数组值)到Active Directory中的单个属性
- 属性数组?
- 我正在尝试通过 Boost 图形库从 Graphviz DOT 文件中读取图形.如何读取存储在数组中的未知数量的属性
- 一个函数模板,可以根据任何属性对对象数组进行排序
- 包含"random"值的类的数组属性(通过另一个类的指针访问时)
- 在Visual c++的WMI中读取int数组属性