gpt4 book ai didi

c++ - 无法将单指针转换为双指针

转载 作者:太空宇宙 更新时间:2023-11-04 11:58:09 24 4
gpt4 key购买 nike

这是我的代码。

#include <iostream>
#include <stdlib.h>
#include <string.h>

using namespace std;

float labweight = .1;
float quizweight = .1;
float assignmentweight = .4;
float examweight = .25;
float finalweight = .15;

void process_quiz(int &numquiz, int **quiz, int argc, char *argv[]) {
for(int i=1; i < argc; i+=2) {
if(argv[i][0]=='-' && argv[i][1]=='q') {
numquiz = atoi(argv[i+1]);
quiz = new int[numquiz];
}
else
std::cout << quiz << " quizzes";
}
return;
}

void process_lab(int &numlab, int **lab, int argc, char *argv[]) {
for(int i=1; i < argc; i+=2) {
if(argv[i][0]=='-' && argv[i][1]=='q') {
numlab = atoi(argv[i+1]);
lab = new int[numlab];
}
else
std::cout << lab << " quizzes";
}
return;
}

void process_assignment(int &numassignment, int **assignment, int argc, char *argv[]) {
for(int i=1; i < argc; i+=2) {
if(argv[i][0]=='-' && argv[i][1]=='q') {
numassignment = atoi(argv[i+1]);
assignment = new int[numassignment];
}
else
std::cout << assignment << " assignmentzes";
}
return;
}

void process_exam(int &numexam, int **exam, int argc, char *argv[]) {
for(int i=1; i < argc; i+=2) {
if(argv[i][0]=='-' && argv[i][1]=='q') {
numexam = atoi(argv[i+1]);
exam = new int[numexam];
}
else
std::cout << exam << " examzes";
}
return;
}

void process_final(int &numfinal, int **final, int argc, char *argv[]) {
for(int i=1; i < argc; i+=2) {
if(argv[i][0]=='-' && argv[i][1]=='q') {
numfinal = atoi(argv[i+1]);
final = new int[numfinal];
}
else
std::cout << final << " finalzes";
}
return;
}

int main(int argc, char* argv[]){

int numquiz, *quiz, numlab, *lab, numassignment, *assignment, numexam, *exam, numfinal, *final;
if (argc == 9){
process_quiz(numquiz, &quiz, argc, argv);
process_lab(numlab, &lab, argc, argv);
process_assignment(numassignment, &assignment, argc, argv);
process_exam(numexam, &exam, argc, argv);
}
if (argc == 10){
process_quiz(numquiz, &quiz, argc, argv);
process_lab(numlab, &lab, argc, argv);
process_assignment(numassignment, &assignment, argc, argv);
process_exam(numexam, &exam, argc, argv);
process_final(numfinal, &final, argc, argv);
}
else{
cout << "Please input things correctly!" << endl;
}

cout << numlab << endl;
cout << numquiz << endl;
cout << numassignment << endl;
cout << numexam << endl;
cout << numfinal << endl;
}

所以我已经消除了除以下错误之外的所有其他错误:

grade.cpp: In function âvoid process_quiz(int&, int**, int, char**)â:
grade.cpp:17: error: cannot convert âint*â to âint**â in assignment
grade.cpp: In function âvoid process_lab(int&, int**, int, char**)â:
grade.cpp:29: error: cannot convert âint*â to âint**â in assignment
grade.cpp: In function âvoid process_assignment(int&, int**, int, char**)â:
grade.cpp:41: error: cannot convert âint*â to âint**â in assignment
grade.cpp: In function âvoid process_exam(int&, int**, int, char**)â:
grade.cpp:53: error: cannot convert âint*â to âint**â in assignment
grade.cpp: In function âvoid process_final(int&, int**, int, char**)â:
grade.cpp:65: error: cannot convert âint*â to âint**â in assignment

现在我研究了一些关于指针的知识,但我不明白为什么我不能将数组中的值赋给变量!我尝试从函数的开头删除额外的指针,但这并没有解决任何问题。我只是收到错误消息,说我无法将单个指针转换为 double 指针,它说错误发生在我调用 main 中的函数的地方。

最佳答案

好吧,例如转到第 17 行。您尝试将指针(由 new 运算符返回)分配给双指针(测验)。

所以你可能想做 *quizz = new ...。但是您知道,在不先检查其值的情况下取消引用指针会在以后自找麻烦。

但无论如何,与其解决这个问题,不如先了解什么是指针,如何使用它们等等。你可能会编译它,但是你写的东西有很多错误(你通常不想通过副作用修改函数的参数,因为它很难维护等)

最终不是让它编译通过,而是安全到达你想去的地方。逐步学习概念,不要尝试太快,考虑到您的代码/问题,这是我的建议。

仅供引用,当您习惯了指针的工作方式后,您应该转向 shared_ptr,这会给您带来更多的安全性。看看它是如何工作的here .

关于c++ - 无法将单指针转换为双指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15238572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com