2015-04-04 169 views
0

我想測試下面的代碼,但是出現編譯錯誤。讓我感到困惑的是,創建和打印pd1和pd2的方式與pd3和pd4相同,但編譯器在打印時會抱怨pd3和pd4。無法打印緩衝區地址

const int BUF = 512; 
const int N = 5; 
char buffer[BUF];  // chunk of memory 
int main(){ 
    using namespace std; 

    double *pd1, *pd2; 
    int i; 
    cout << "Calling new and placement new:\n"; 
    pd1 = new double[N];   // use heap 
    pd2 = new (buffer) double[N]; // use buffer array 
    for (i = 0; i < N; i++) 
     pd2[i] = pd1[i] = 1000 + 20.0*i; 
    cout << "Buffer addresses:\n" << " heap: " << pd1 << " static: " << (void *)buffer << endl; 
    cout << "Buffer contents:\n"; 
    for(i = 0; i < N; i++) { 
     cout << pd1[i] << " at " << &pd1[i] << "; "; 
     cout << pd2[i] << " at " << &pd2[i] << endl; 
    } 

    cout << "\nCalling new and placement new a second time:\n"; 
    double *pd3, *pd4; 
    pd3 = new double[N]; 
    pd4 = new (buffer) double[N]; 
    for(i = 0; i < N; i++) 
     pd4[i] = pd3[i] = 1000 + 20.0 * i; 
    cout << "Buffer contents:\n"; 
    for (i = 0; i < N; i++) { 
     cout << pd3[i] < " at " << &pd3[i] << "; "; 
     cout << pd4[i] < " at " << &pd4[i] << endl; 
    } 

    return 0; 
} 

編譯錯誤:

newplace.cpp: In function ‘int main()’: 
newplace.cpp:33:36: error: invalid operands of types ‘const char [5]’ and ‘double*’ to binary ‘operator<<’ 
    cout << pd3[i] < " at " << &pd3[i] << "; "; 
            ^
newplace.cpp:34:36: error: invalid operands of types ‘const char [5]’ and ‘double*’ to binary ‘operator<<’ 
    cout << pd4[i] < " at " << &pd4[i] << endl; 
+2

在這兩行中用'<<'替換'<'。 – Tobias 2015-04-04 20:27:25

回答

2

你在這裏失蹤

cout << pd3[i] < " at " << &pd3[i] << "; "; 
cout << pd4[i] < " at " << &pd4[i] << endl; 

一個<符號嘗試

cout << pd3[i] << " at " << &pd3[i] << "; "; 
cout << pd4[i] << " at " << &pd4[i] << endl; 
1

你只把一個<你在哪裏TR流中ying打印出緩衝區內容。

cout << pd3[i] < " at " << &pd3[i] << "; "; // there is only one < 
cout << pd4[i] < " at " << &pd4[i] << endl; //^

確保在流插入運算符中有兩個<'s

cout << pd3[i] << " at " << &pd3[i] << "; "; 
cout << pd4[i] << " at " << &pd4[i] << endl;