c++ 在类构造函数中验证argv[]输入[已关闭]

nwo49xxi  于 2023-07-01  发布在  其他
关注(0)|答案(1)|浏览(139)

**关闭。**此题需要debugging details。目前不接受答复。

编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答这个问题。
4天前关闭。
Improve this question
我正在处理一个类赋值,在那里我需要创建一个结构堆栈。我应该动态创建一个指针数组,大小基于一个命令行输入。传递给构造函数的值应该大于2,如果不大于2,则将其设置为10。每当我将arrSize = stoi(argv[1])传递给Class(int)时,它都会返回我所放置的任何内容,而不会更改它。
即使我手动设置intarrSize = 1,它仍然不能正确地过滤值。我相信构造函数中的if-else语句是可以的,因为我不知道还有其他方法来测试和更改传递的arg;我也只能在类中有一个构造函数,它接受argv值作为参数。
我觉得我犯了一些可悲的简单错误,但我一直在努力弄清楚这一点,因为周四。我已经完成了程序的其余部分,这是我需要修复的最后一件事。
我不能弄清楚变量是否以某种《双城之战》的方式作为常量传递,或者构造函数是否没有被有效调用,或者它是否完全是别的东西。任何帮助非常感谢。
类构造函数:

Stack::Stack(int arrSize){
    this->top = -1;
    if (arrSize < 2){
                this->size = 10;
        stack = new Data*[size];
    }
    else{
                this->size = arrSize;
        stack = new Data*[size];
    }
}

类属性:

private:
    int top;
    int size;
    Data **stack; //Data is a struct with int "id" and string "information"

驱动程序代码:

int main(int argc, char** argv) {
    srand(time(NULL));
    try{
    if (argc > 2){
    std::cout << "Please enter only a single parameter in the command line" << std::endl;
    }
    else{
    std::string strtemp;
    Data myStruct;    //initializing empty struct for pop()
    int arraySize = std::stoi(argv[1]);   //converting argv[1] to int, store in arraySize
    Stack stack(arraySize);     //create Stack object, passing arraySize as arg
        ...truncated...}
k2arahey

k2arahey1#

我发布的代码实际上没有任何问题,我没有正确使用size属性,它导致了初始化错误。
我很感激所有关于更好风格的建议,我会考虑的。至于使用向量的问题,这是一门数据结构课,所以我认为重点是从计算机科学的Angular 来学习重建堆栈,链表,哈希表;而不是编程的Angular 。
谢谢大家!

相关问题