Visual Studio 2015调试时提示标识符“_fictionBook”未定义求助
调试时提示标识符“_fictionBook”未定义的原因及解决方法
我帮你分析下这个错误的根源,以及对应的解决办法:
错误原因拆解
你在调试watch窗口输入_fictionBook时出现未定义提示,主要有两个核心原因:
- 临时对象被销毁:你的代码里用了
Fiction().addBook(userChoice);——这是创建了一个临时Fiction对象,调用完addBook后这个对象立刻被销毁,调试时这个对象的所有成员(包括_fictionBook)已经不存在了,自然找不到标识符。 - 作用域或访问权限问题:如果
_fictionBook是Fiction类的私有成员,默认调试器无法直接访问;或者你根本没在当前作用域(比如main函数里)定义一个名为_fictionBook的变量,调试器当然找不到它。
具体解决方法
1. 改用命名的持久对象,而非临时对象
把case4里的代码改成下面这样,创建一个有名字的Fiction对象,它会在代码块作用域内一直存在,调试时就能正常监视它的成员:
case 4: system("cls"); //add a book this has to come first { cout << "Enter the title of the book" << endl; string userChoice; getline(cin, userChoice); // 定义命名对象,替代临时对象 Fiction myFictionInstance; myFictionInstance.addBook(userChoice); // 调试时可以监视 myFictionInstance._fictionBook(如果成员可访问) } break; // 别忘了加break,否则会执行default的代码
2. 调整成员访问权限(调试用)
如果_fictionBook是Fiction类的私有成员,VS调试器默认看不到它。你可以:
- 临时把
_fictionBook的访问权限改成public,调试完成后再改回private; - 或者在VS2015的调试设置里开启「允许查看私有成员」(路径:工具→选项→调试→常规,勾选「启用属性评估和其他隐式函数调用」,不过这个可能会影响调试性能)。
3. 正确指定监视对象
调试时不要直接输入_fictionBook,而是要指定所属的对象实例。比如你创建了myFictionInstance,就输入myFictionInstance._fictionBook来监视这个对象的成员变量。
额外小提醒
你的case4代码块末尾没有加break;,执行完case4后会自动跳到default分支,导致每次选择4都会额外输出"thats not a choice",记得加上break;哦。
内容的提问来源于stack exchange,提问作者Sam Weiss
相关产品推荐
相关产品推荐

