码迷,mamicode.com
首页 > 其他好文 > 详细

遇到 ''isSort()''declared here, later in the translation unit

时间:2020-11-21 12:07:18      阅读:5      评论:0      收藏:0      [点我收藏+]

标签:tar   编写   mic   type   int   and   编译   sts   end   

在编写代码时,遇到
在原来的代码中出现这个问题

技术图片
原来的代码:

//3  计算排序时间
    template<typename T>
    void testSort(string sortName, void(* sort) (T [],int ),T arr[],int n){
            clock_t startTime  = clock();
            sort(arr,n);
            clock_t endTime = clock();

            assert(isSort(arr,n));
            cout<<sortName<<":"<<double(endTime-startTime) / CLOCKS_PER_SEC<<"s"<<endl;
        return;
        }

    //    4   判断是否是已排序的
    template <typename T>
    bool isSort(T arr[],int n){
        for (int i = 0;i<n-1;i++){
            if (arr[i] > arr[i+1]){
                return false;
            }
        }
        return true;
    }

上面的代码死活不出来,但是两个调换顺序之后就可以了,详情见下面这个博客 ,但是博客中描述的是,在遇到普通函数时,需要把申明调用的函数先实例化,但模板函数不用,而这边本身就是模板函数,所以还是存在一点疑惑

prog.cpp: In instantiation of ‘void foo(T) [with T = int]’:
prog.cpp:16:7: required from here
prog.cpp:6:10: error: ‘bar’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
bar(x); // OKAY
^
prog.cpp:10:6: note: ‘template void bar(T)’ declared here, later in the translation unit
void bar(T x)

在gcc 4.8中看到的那样,它实际上并没有编译。编写 template 扩展器时,编译器在早期做的一件事就是将它们视为类似于宏的东西。当它们声明时,几乎不会做任何事情,而在实例化它们时,将查找所有内容。当 template 被声明,实例化时更少。

https://www.it1352.com/2094010.html

    //    4   判断是否是已排序的
    template <typename T>
    bool isSort(T arr[],int n){
        for (int i = 0;i<n-1;i++){
            if (arr[i] > arr[i+1]){
                return false;
            }
        }
        return true;
    }


    //3  计算排序时间
    template<typename T>
    void testSort(string sortName, void(* sort) (T [],int ),T arr[],int n){
            clock_t startTime  = clock();
            sort(arr,n);
            clock_t endTime = clock();

            assert(isSort(arr,n));
            cout<<sortName<<":"<<double(endTime-startTime) / CLOCKS_PER_SEC<<"s"<<endl;
        return;
        }

遇到 ''isSort()''declared here, later in the translation unit

标签:tar   编写   mic   type   int   and   编译   sts   end   

原文地址:https://www.cnblogs.com/sailorlee11/p/13993376.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!