テンプレートのコピーコンストラクターについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Makin
記事: 12
登録日時: 8年前

テンプレートのコピーコンストラクターについて

#1

投稿記事 by Makin » 8年前

以下のコードを書いたところ、コピーコンストラクターにエラーメッセージが表示されてしまいます。エラーメッセージを見ても、どこが間違っているのか全く見当がつかないので、ご指摘お願いします。

コード:

#include "stdafx.h"
#include <iostream>
using namespace std;

template <class T>
class DynArray {
	T* pData;
	int size;
public:
	DynArray() {
		pData = NULL;
		size = 0;
	}

	DynArray(const DynAarray& theOther) {     //ここにエラーメッセージが表示されてしまう。
		size = 0;
		pData = NULL;
		*this = theOther;
	}
	~DynArray() {}

	void InsertAt(const T& newElement, int position);
	void RemoveAt(int position);
	const DynArray<T>& operator=(const DynArray<T>& theOther);
};

template<class T>
const DynArray<T>&  DynArray<T>::operator=(const DynArray<T>& theOther) {
	if (this != &theOther)
		delete[] pData;
	size = theOther.size;
	if (size == 0) { pData = NULL, return *this; }
	pData = new T[size];
	for (int i = 0; i < size; i++)
		pData[i] = theOther.pData[i];
	return *this;
}


アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: テンプレートのコピーコンストラクターについて

#2

投稿記事 by みけCAT » 8年前

コピーコンストラクタであるならば、引数の方はconst DynAarray&ではなくconst DynArray&にするべきでしょう。
また、32行目でreturnは演算子ではないのにコンマ演算子でつなごうとしてエラーになっています。素直にセミコロンを使うべきでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Makin
記事: 12
登録日時: 8年前

Re: テンプレートのコピーコンストラクターについて

#3

投稿記事 by Makin » 8年前

Aarrayになっていたんですね......。投稿前に何度も見直したのですが、なぜか自分では全く気が付くことができませんでした。
32行目もセミコロンを使うべきですね。とても初歩的なミスでした。みけCATさん、わざわざありがとうございました。

Makin
記事: 12
登録日時: 8年前

Re: テンプレートのコピーコンストラクターについて

#4

投稿記事 by Makin » 8年前

すみません。解決のボタンを押してしまったのですが、修正後に何故か再度エラーが起きてしまった(修正後に関数の内容を変更したりは一切していません)ので、ここにもう一度書きます。main関数内で、オブジェクトを生成して、代入などの操作はしました。

指摘された2か所のエラーを直したところ、最初にコードを動かした時に異常な動き(勝手にコマンドプロンプトが閉じる)をしたのですが、再度コードを読み込んでみたら、一応動いたので(なぜかパソコンが急に重くなりましたが)気にしていなかったのですが、今になって、何故か29行目と33行目にエラーメッセージが表示されるようになり、急にコンパイラエラーになってしまいました。エラーメッセージは、'0x3000': this character is not allowed as a first character of an identifierと表示されていますが、全く意味が分かりません。どういうことでしょうか?29行目と33行目を削除すると、コードは正常に動きます。オブジェクトの代入をすると、もちろんエラーになってしまいますが・・・。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: テンプレートのコピーコンストラクターについて

#5

投稿記事 by みけCAT » 8年前

Unicode Character 'IDEOGRAPHIC SPACE' (U+3000)
Javaで文字コードを調べる... 全角スペース(ideographics space)を半角スペースに置き換える方法 - my-notebook
コードに全角スペースが混ざっている可能性がありますね。
エディタの検索機能を使うか、サクラエディタなどの記号を強調表示できるエディタで変な文字が入っていないかを確かめましょう。
文字によってはテキストエディタでは確認できないかしにくく、バイナリエディタを使ったほうが発見しやすいかもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Makin
記事: 12
登録日時: 8年前

Re: テンプレートのコピーコンストラクターについて

#6

投稿記事 by Makin » 8年前

全角スペースは一切コードに入っていてはいけないんですね・・・。
追加したコメント欄を調べていたところ、コードの後に全角スペース(コードと、コメントの間に全角スペース)を入れて、コメントを書いていたのが原因でした。
みけCATさん、毎回ありがとうございます。助かりました。

返信

“C言語何でも質問掲示板” へ戻る