2015-10-20 42 views
0

本月我开始学习语言(С++)。 专业化必须返回最长行的地址。我的代码不起作用。编译器错误没有显示。C++专业化不起作用

#include <iostream> 
#include <cstring> 

using namespace std; 

template <typename T> 
T maxn(const T * cArr, const int iSize); 
template <> 
char * maxn<char*>(char * const * cArr, const int iArrSize); 

int main(void){ 

    int iTest = 0; 
    double dTest = 0.0; 

    int iArr[6] = {1, 2, 3, 7, 5, 6}; 
     int iArrSize = (sizeof(iArr))/(sizeof(iArr[0])); 
    double dArr[4] = {1.0, 2.0, 3.0, 4.0}; 
     int dArrSize = (sizeof(dArr))/(sizeof(dArr[0])); 
    const char * cNames[5] = {"Mona", "Elzushka", "Leopold", "Burger", "Arny"}; 
     int iSizeOf = (sizeof(cNames))/(sizeof(cNames[0])); 


    iTest = maxn(iArr, iArrSize); 
     cout << "Test maxn(int) = " << iTest << endl; 
    dTest = maxn(dArr, dArrSize); 
     cout << "Test maxn(double) = " << dTest << endl; 
    const char * cTest = maxn(cNames, iSizeOf); 
     cout << "Test maxn(char) = " << cTest << endl; 

    return 0; 
} 

template <typename T> 
T maxn(const T* tArr, const int iSize) 
{ 
    T tMax = tArr[0]; 

    for (int i = 0; i < iSize; i++) 
    { 
     if (tArr[i] > tMax){ 
      tMax = tArr[i]; 
     } 
    } 
    cout << "MAXN T " << endl; 
    return tMax; 
} 

我的专业化不起作用。

template <> 
char * maxn<char*>(char * const * cArr, const int iArrSize) 
{ 
    char * cMaxLen = &cArr[0][0]; 

    for (int i = 0; i < iArrSize; i++) 
    { 
     if (strlen(&cArr[i][0]) > strlen(cMaxLen)){ 
      cMaxLen = &cArr[i][0]; 
     } 
    } 
    cout << "MAXN C " << endl; 
    return cMaxLen; 
} 

程序是从书 “S.Prata:C++的Primer Plus”

+1

定义*不工作*。 – NathanOliver

+0

*“我认为这项任务大约四点钟。” - 对不起? –

+0

如何解决它的问题? –

回答

1

你期待调用maxn以下行:

const char * cTest = maxn(cNames, iSizeOf); 

解决向专业化。 cNames声明为:

const char * cNames[5] = {"Mona", "Elzushka", "Leopold", "Burger", "Arny"}; 

cNames衰变为const char**。如果您希望调用相匹配的专业化,专业化需要是:

template <> 
char const * maxn<char const*>(char const * const * cArr, const int iArrSize); 

后,我作出改变,改变的实施,与之相匹配的,我获得使用您的发布代码休息下面的输出。

MAXN T 
Test maxn(int) = 7 
MAXN T 
Test maxn(double) = 4 
MAXN C 
Test maxn(char) = Elzushka 
+0

谢谢你的朋友。一切正常) –

+0

@ArtemSolovev,不客气。 –