私の DynamicArray はほとんど ArrayList です。ユーザーが要素が次々とある連続したメモリブロックを持ち、必要に応じて追加のスペースがあることを許可したいと考えています。私が遭遇した唯一の問題は、ints/floats/bools などの格納でした...それらを格納できるように、_array を T** にすることにしました。
ただし、DynamicArray の add メソッドに定数を渡すのに少し問題があります。値を渡す前に変数に値を格納する必要があります。そうしないと、次のエラーが発生します。
g++ main.cpp -Wall -Werror -std=c++0x
main.cpp: In function ‘int main()’:
main.cpp:14:21: error: no matching function for call to ‘triforce::DynamicArray<std::basic_string<char> >::add(const char [5])’
main.cpp:14:21: note: candidates are:
DynamicArray.h:150:10: note: bool triforce::DynamicArray<T>::add(T&) [with T = std::basic_string<char>]
DynamicArray.h:150:10: note: no known conversion for argument 1 from ‘const char [5]’ to ‘std::basic_string<char>&’
DynamicArray.h:176:10: note: void triforce::DynamicArray<T>::add(uint, T&) [with T = std::basic_string<char>, uint = unsigned int]
DynamicArray.h:176:10: note: candidate expects 2 arguments, 1 provided
私の DynamicArray には、_array という名前の T** 変数があります。
/**
144 * @brief Adds an element to the end of the array. The array will double in size,
145 * if needed.
146 * @param element The element to be added to the array.
147 * @returns Returns if the element was added successfully.
148 */
149 template<class T>
150 bool DynamicArray<T>::add(T& element)
151 {
152 if(_array == NULL)
153 {
154 errorMsg("Cannot add to null array");
155 return false;
156 }
157
158 if(_size == _capacity)
159 {
160 increaseCapacity(_capacity * 2);
161 }
162
163 _array[_size] = &element;
164 _size++;
165
166 return true;
167 }
これは機能します:
13 string val1 = "val1";
14 array.add(val1);
これは機能しません
13 string val1 = "val1";
14 array.add("val1");
最初に変数に入れずに 1 や文字列 "hello" を渡すだけのような定数をこの関数が受け入れるようにするにはどうすればよいですか? パラメーターに const を入れてみましたが、それもうまくいかないようでした。