5

私のメインメソッドで、ヒープ上に作成された配列を指すconstint配列ポインターを宣言するとします。次に、コンストラクターTryInitialize()で(メモリアドレスを使用して)その値を初期化し、それらを出力します。これは機能しておらず、何が間違っているのでしょうか。ありがとう!

#include "stdafx.h"
#include "part_one.h"
#include <string>
#include <iostream>

using namespace std;

string createTable(unsigned int* acc, double* bal, int n) {
    string s;
    char buf[50];

    for (int i = 0; i < n; i++) {
            sprintf_s(buf,"%7u\t%10.2f\n",acc[i], bal[i]);
            s += string(buf);
    }

    return s;
}



int _tmain(int argc, _TCHAR* argv[])
{

    const int *tempInt = new const int[4];
    TryInitialize(tempInt);
    std::cout << tempInt[1] << endl;

    system("pause");

    return 0;
}

そして、これが私のコンストラクターのコードです:

#include "part_one.h"


TryInitialize::TryInitialize(void) {

}

TryInitialize::TryInitialize(int constInt[]) {
    constInt[0] = 8;
    constInt[1] = 0;
    constInt[2] = 0;
    constInt[3] = 8;
}
4

3 に答える 3

3

const値を変更しないでください。

あなたが達成しようとしているものについては、非定数ポインターと定数ポインターを宣言し、初期化後に非定数ポインターを定数ポインターに割り当てることをお勧めします。

int _tmain(int argc, _TCHAR* argv[])
{
    const int *tempTempInt = new int[4];
    TryInitialize(tempInt);
    const int* const tempInt = tempTempInt;
    std::cout << tempInt[1] << endl; //this is now constant.

    system("pause");

    return 0;
}

const をポインター宣言のどこに置くかにも注意してください。

const int* const tempInt = tempTempInt;

上記の宣言では、2 番目constはポインターを変更できないことを意味します。最初のconstものは、ポイントされた値を変更できないことを意味します。

于 2013-02-01T01:19:00.237 に答える
1

ポインタを として宣言しますconst int*。修飾子は、配列のconst値を変更できないことを意味します。

を削除するか、const(コンストラクターとは異なり) 配列を割り当てて返すことができる初期化メソッドを作成します。

const int* init_my_array()
{
  int * ret = new int[4];
  ret [0] = 8;
  ret [1] = 0;
  ret [2] = 0;
  ret [3] = 8;
  return ret;
}
...
const int *tempInt = init_my_array();
于 2013-02-01T01:15:47.303 に答える
0

あなたはそうしない。なんで?const の場合、オブジェクトが構築されると変更できないためです。注:設定しても、初期化されていない値から値を効果的に変更しているため、最初から const の定義に反します。

于 2013-02-01T03:21:01.693 に答える