- PR -

cygwinとUnixのコンパイルの違い

1
投稿者投稿内容
さく
ベテラン
会議室デビュー日: 2004/06/11
投稿数: 74
投稿日時: 2007-11-30 01:32
こんにちは。
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
ひで
常連さん
会議室デビュー日: 2005/04/27
投稿数: 41
お住まい・勤務地: 神戸
投稿日時: 2007-11-30 11:14

ここ
が参考になるかもしれません。

[ メッセージ編集済み 編集者: ひで 編集日時 2007-11-30 11:39 ]
さく
ベテラン
会議室デビュー日: 2004/06/11
投稿数: 74
投稿日時: 2007-12-01 12:16
ひでさん。

回答ありがとうございます。
提示して頂いたURLを参考にします。

1

スキルアップ/キャリアアップ(JOB@IT)