热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C++模板用法:更改变量位置会导致编译错误

如何解决《C++模板用法:更改变量位置会导致编译错误》经验,为你挑选了1个好方法。

我有一个像这样的简单程序:

$ cat testCompile.cpp

    #include
    int fd[2];
    template
    void f(){printf("fd\n");}
    int main(){
        f();
        return 0;
    }

编译并运行它,没问题,只打印"fd".但是,如果我将fd [2]的位置更改为main函数,则无法编译:

    #include
    template
    void f(){printf("fd\n");}
    int main(){
        int fd[2];
        f();
        return 0;
    }

clang报道:

    testCompile.cpp:6:5: error: no matching function for call to 'f'
        f();
        ^~~~~
    testCompile.cpp:3:6: note: candidate template ignored: invalid
          explicitly-specified argument for template parameter 'fd'
    void f(){printf("fd\n");}
         ^
    1 error generated.

这个错误表示什么?哪里不对了?



1> Some program..:

首先,您需要记住模板是编译时的事情,它全部由编译器处理,并且在运行时没有任何操作.

然后你需要记住,最常见的局部变量处理是将它们放在堆栈上,并且在编译时可能不知道堆栈的位置.

现在,如果我们将它们放在一起,因为在编译时不知道堆栈分配对象的位置,仅在运行时,您不能使用与模板一起使用的堆栈分配(即局部变量).

它适用于全局变量,因为编译器可以知道对象的实际位置.


@PremkumarU模板可以有非类型参数,以便在编译时传递值.在这个例子中,一个指针作为模板参数传递,因此在函数`fd`中不是一个类型,而是一个指向`int`的指针.就像它作为普通函数参数传递一样.
推荐阅读
author-avatar
平凡数码广场
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有