在《Effective C++》 中文版 第三版 item35, 175頁 第三句代碼
EyeCandyCharacter ecc1(HealthCalculator());這句好像是錯的,作者目的是定義一個類物件 ecc1
但是這里編譯器會認為這一句代碼是函式宣告。
不知道看過 Effective C++的同學是否認同
uj5u.com熱心網友回復:
知道的同學給回一個嘛,一起學習,分什么的都是小事uj5u.com熱心網友回復:
沒問題的,函式宣告必須有引數的型別,比如:MyClass test1(int); // test1是一個函式,引數是int,回傳值是MyClass
int GetIntValue() { return 1; }
MyClass test2(GetIntValue()); // test2是類MyClass的一個實體,用函式GetIntValue的回傳值進行初始化
uj5u.com熱心網友回復:
那你幫我看下這段代碼,注釋部分會報錯
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <string.h>
#include <stdio.h>
#include <tr1/memory>
#include <tr1/functional>
using namespace std;
class cal;
typedef std::tr1::function<int (cal&) > myfun;
class myClass{
public:
int operator()(cal& p){
printf("nihao\n");
return 0;
}
};
class cal{
public:
cal(myfun f):fun(f){
}
int print(){
cout<<fun(*this)<<endl;
return 0;
}
private:
myfun fun;
};
int first(cal&p){
printf("nidaye\n");
return 0;
}
int main(){
cal a(first);
a.print();
myClass ha;
cal b(ha);
//cal b(myClass());
b.print();
return 0;
}
uj5u.com熱心網友回復:
報錯是因為cal類只定義了cal(myfunc)建構式,并沒有定義cal(MyClass)建構式uj5u.com熱心網友回復:
好像不是這樣的,如果把注釋代碼下一行注釋掉那么就不報錯,顯然是把注釋部分當宣告了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/117232.html
標籤:基礎類
上一篇:c++物件建立
下一篇:求匿名登陸服務器的埠號?
