如何向函数传递任意类型对象?遇“Write未在作用域中声明”报错求解
问题解决方法
你的猜测是对的——C++标准库中没有名为Object的内置类型,这是代码的核心问题之一。另外报错“‘Write' was not declared in this scope”还可能和函数声明位置、头文件引用有关,下面是修正后的完整方案:
1. 替换不存在的Object类型
要实现接受任意类型对象的函数,有两种常用方式:
方式一:使用模板函数(推荐)
模板函数可以适配任意类型,且能保留原始类型信息:
#include <iostream> #include <typeinfo> // 模板函数,支持任意类型参数 template <typename T> void Write(const T& obj) { std::cout << typeid(obj).name() << std::endl; } // 调用示例 int main() { int a = 10; std::string b = "test"; double c = 3.14; Write(a); Write(b); Write(c); return 0; }
方式二:使用void*(不推荐,丢失类型信息)
如果一定要模仿“通用对象”的写法,可以用void*,但无法直接通过typeid获取原始类型(只能得到void*的类型):
#include <iostream> #include <typeinfo> void Write(void* obj) { // 这里只能输出void*的类型名,无法获取传入对象的原始类型 std::cout << typeid(obj).name() << std::endl; } int main() { int a = 10; Write(&a); // 需要传指针 return 0; }
2. 解决“not declared in this scope”报错
除了类型问题,这个报错通常是因为:
- 函数
Write在调用前未声明或定义,确保Write的定义(或声明)在main函数之前 - 忘记包含必要的头文件:
#include <iostream>(用于cout)和#include <typeinfo>(用于typeid)
内容的提问来源于stack exchange,提问作者Kubaa322
相关产品推荐
相关产品推荐

