c++ 使用try/catch处理从int到int* 的无效转换的异常

tyg4sfes  于 2023-04-01  发布在  其他
关注(0)|答案(1)|浏览(173)

我试图捕捉此错误,但此代码不起作用。我试图添加不同的捕捉条件,但似乎都不起作用。是否有可能捕捉此错误?

#include <iostream>
#include <exception>
#include <stdexcept>

void myFunction(int* ptr) {
  int y = 3;
}

int main() {
  try {
    int x = 5;
    myFunction(x); // call function with invalid parameter
  }
  catch (const std::invalid_argument& ia) {
    std::cerr << "Invalid argument: " << ia.what() << '\n';
  }
  catch(const std::exception& e) {
    std::cerr << "Invalid conversion error: " << e.what() << '\n';
  }
  catch(...) {
    std::cerr << "Error" << '\n';
  }
  return 0;
}

错误信息:

main.cpp: In function ‘int main()’:
main.cpp:20:16: error: invalid conversion from ‘int’ to ‘int*’ [-fpermissive]
   20 |     myFunction(x); // call function with invalid parameter
      |                ^
      |                |
      |                int
main.cpp:13:22: note:   initializing argument 1 of ‘void myFunction(int*)’
   13 | void myFunction(int* ptr) {
      |                 ~~~~~^~~
qojgxg4l

qojgxg4l1#

如果你想创建一个指向x的指针,你需要在变量前面加上与符号&,这将给予你一个指向x的指针。
这样做:

myFunction(&x);

现在它就可以工作了,你不需要把它放到一个try/catch块中。

相关问题