アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。
UNIXのソースをWindows上でビルドできるようにしています。
Windows上では、cygwinのコンパイラを使用しています。

下記コードがコンパイルが通らず悩んでいます。

vector<TestCls>:: iterator it = &array[2] ;

iteratorのitに、arrayの動的配列2番目のアドレスを参照渡し?しています。

UNIXでは、ビルドと動作は確認できたのですが、
CYGWINでは、ビルドができませんでした。

ビルドオプションなど、足りないものがあるのでしょうか?

下記サンプルソースを置きます。

#####################################
☆☆☆TestCls.h☆☆☆
#ifndef TESTCLS_H_
#define TESTCLS_H_
class TestCls
{
private:
int age ;
public :
TestCls() ;
virtual ~TestCls() ;
void setAge(int ax) { age = ax ;}
int getAge() { return age ; }
} ;
#endif /*TESTCLS_H_*/
#####################################
☆☆☆TestCls.cpp☆☆☆
#include "TestCls.h"

TestCls::TestCls() {}
TestCls::~TestCls() {}
#####################################
☆☆☆testmain.cpp☆☆☆
#include<vector>
#include<iostream>
#include "TestCls.h"
int main()
{
using namespace std ;
vector<TestCls> array ;
int i;
for(i=0; i<10; i++) {
TestCls clstestCls ;
clstestCls.setAge(i+10) ;
array.push_back(clstestCls) ;
}
vector<TestCls>::iterator it = &array[2] ; // ←ここでエラー発生。
while(it != array.end()) {
cout << it->getAge() << endl ;
++it ;
}
return 0 ;
}
#####################################

ビルドオプションは、
g++ -I"c:\~~\inc" -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/testmain.d" -MT"src/testmain.d" -o"src/testmain.o" "../src/testmain.cpp"

エラーメッセージは、
error: conversion from `TestCls*' to non-scalar type `__gnu_cxx::__normal_iterator<TestCls*, std::vector<TestCls, std::allocator<TestCls> > >' requested

A 回答 (3件)

基本的に、vectorのイテレータに生ポインタを代入する、なんていう無茶なことをしてはいけません。



そのUnixのコンパイラで使ってるSTLが、「たまたま」、vectorのイテレータとして、生ポインタのtypedefを使うという実装をしていたのでしょう。
UNIX、Windowsの問題ではないです。STLライブラリ(とコンパイラ)の違いです。

vector<TestCls>::iterator it = array.begin();
it += 2;
とかやるんでしょうね。
    • good
    • 0
この回答へのお礼

rabbit_catさん
回答ありがとうございます。

STLライブラリがあるとは、知りませんでした。

UNIXのソースを極力いじりたくない意向があったのですが、
デバッグオプションでビルド時に切り替える事にします。

貴重な教示ありがとうございました。

お礼日時:2007/12/01 12:09

array.begin()+2


でいいような気もします>#2.
    • good
    • 0
この回答へのお礼

Tacosanさん
回答ありがとうございます。

少ない行で対応したいので、array.begin()+2を採用させて頂きます。

多謝

お礼日時:2007/12/01 12:12

エラーになる方が正常だと思いますが。

    • good
    • 0
この回答へのお礼

回答ありがとうございます。

なぜ、エラーになるのでしょうか?

UNIXでは、正常にビルドと、動作は確認できています。

何が違うのでしょうか?

お礼日時:2007/11/30 00:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!