You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向函数传递任意类型对象?遇“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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 22:35:10