こんにちは。
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
No.2ベストアンサー
- 回答日時:
基本的に、vectorのイテレータに生ポインタを代入する、なんていう無茶なことをしてはいけません。
そのUnixのコンパイラで使ってるSTLが、「たまたま」、vectorのイテレータとして、生ポインタのtypedefを使うという実装をしていたのでしょう。
UNIX、Windowsの問題ではないです。STLライブラリ(とコンパイラ)の違いです。
vector<TestCls>::iterator it = array.begin();
it += 2;
とかやるんでしょうね。
rabbit_catさん
回答ありがとうございます。
STLライブラリがあるとは、知りませんでした。
UNIXのソースを極力いじりたくない意向があったのですが、
デバッグオプションでビルド時に切り替える事にします。
貴重な教示ありがとうございました。
No.3
- 回答日時:
array.begin()+2
でいいような気もします>#2.
Tacosanさん
回答ありがとうございます。
少ない行で対応したいので、array.begin()+2を採用させて頂きます。
多謝
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたい 6 2023/01/23 12:00
- WordPress(ワードプレス) wordpressでphpを読み込みたい 1 2022/10/30 23:40
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
switch文のエラーについて
-
VC++で文字列から任意の文字を...
-
このプログラミング誰か教えて...
-
ファイル読み込みとmap処理
-
boost::lexical_castで16進数文...
-
enumの値から定義名を文字列化...
-
Linux Ubuntu19.10でQt5.14.1の...
-
ハミング符号の解読について
-
セグメンテーションフォルトが...
-
#include "fstream.h"
-
C言語からgnuplot呼び出し
-
vectorの中にmap
-
Haru PDF Library
-
C++で、テキストファイルを一行...
-
C言語のポインターで詰まっている
-
snprintfが使用できない。
-
winpcapを用いたプログラミング
-
C言語プログラミングにて、関数...
-
JPEGやPNGが読めるLoadImage関数
-
Vectorのポインタが入ったvector
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラーが出ているのですが...
-
VC++で文字列から任意の文字を...
-
enumの値から定義名を文字列化...
-
switch文のエラーについて
-
空ENTERの判別
-
なぜ、C++の標準ヘッダをインク...
-
【C++】ヘッダ内でstringを格納...
-
C++での <iostream.h>と<iostre...
-
#include "fstream.h"
-
#define中の#のエスケープ
-
JPEGやPNGが読めるLoadImage関数
-
リモートデスクトップの接続元I...
-
CStringとString
-
string型のフォーマット書式指...
-
std::map の const 修飾について
-
VHDLのsignedとunsignedの違いは?
-
このプログラミング誰か教えて...
-
構造体配列のvectorへの変換と...
-
指定した文字を削除したい
-
構造体に決められた文字列を入...
おすすめ情報