2015-04-04 124 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;