vector をインクルードするだけでエラーになる

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

vector をインクルードするだけでエラーになる

#1

投稿記事 by もじゃっと » 3ヶ月前

C++ を使ってiOSアプリの開発中に、困ったことがあったので質問させていただいきます。

今まで正常にビルドできていたプロジェクトが、突然
Use of undeclared identifier '__cap'
というエラーが vector ファイル内で発生してビルドできなくなりました。
コード内で std::vector を使用していなくてもエラーは発生し、例えばこれだけでもビルドできません。

コード:

#include <vector>
int ios_main( void ){
	return 0 ;
}
vector ファイル内の該当箇所は以下の様になっており、とこがだめなのか私にはわかりませんでした。
(そもそも標準ライブラリなので間違いがあるとは思えません。)

コード:

//  Precondition:  __new_size > capacity()
template <class _Tp, class _Allocator>
inline _LIBCPP_INLINE_VISIBILITY
typename vector<_Tp, _Allocator>::size_type
vector<_Tp, _Allocator>::__recommend(size_type __new_size) const
{
    const size_type __ms = max_size();
    if (__new_size > __ms)
//        this->__throw_length_error();
    const size_type __cap = capacity();
    if (__cap >= __ms / 2)
        return __ms;
    return _VSTD::max<size_type>(2*__cap, __new_size);
}
Xcode のキャッシュクリアや、異なるプロジェクトでのテストも行いましたが、解決しませんでした。
プロジェクトの設定などの問題なのでしょうか。
ご教授お願いします。

macOS 10.13.6 + Xcode 10.1
DXライブラリiOS版を使用しています。

アバター
かめのこのこのこ
記事: 15
登録日時: 2年前

Re: vector をインクルードするだけでエラーになる

#2

投稿記事 by かめのこのこのこ » 3ヶ月前

ファイル vector の提示された部分の上から9行目

コード:

//        this->__throw_length_error();
のコメントアウトを外し

コード:

        this->__throw_length_error();
とすると少なくともビルドはできるようになると思います。

(おそらくこの作業をすることで実行時のエラーが発生するようにはなるとは思いますが、その時は新しいスレッドを建てて質問するもよし、このスレッドに追記するもよし、お待ちしていますぞ)

...ここから解説

提示されたファイル vector の一部分の __recommend 関数の実装に中括弧 {} のない if 文があるので、わかりやすいように中括弧をつけてみると..

コード:

    const size_type __ms = max_size();
    if (__new_size > __ms) {
        //        this->__throw_length_error();
        const size_type __cap = capacity();
    }
    if (__cap >= __ms / 2) {
        return __ms;
    }
    return _VSTD::max<size_type>(2*__cap, __new_size);
のようにコメントアウトのせいで __cap の宣言が if 文の中に入ってしまい、__cap >= __ms / 2 のところで変数 __cap など知らないぞとコンパイラに怒られたのでした。

もじゃっと
記事: 4
登録日時: 1年前

Re: vector をインクルードするだけでエラーになる

#3

投稿記事 by もじゃっと » 3ヶ月前

if文を見落としておりました。
ご指摘いただいた箇所のコメントアウトを外してみたところ、問題なくビルドでき、エラーで落ちることも今の所ありません。
標準ライブラリのフォルダを確認してみたところ、ほとんどのファイルのタイムスタンプは2018年なのに、vector ファイルだけちょうど問題が発生し始めた時間になっていました。
vector ファイルを書き換えた覚えはまったくなく、第一このファイルはXcode上では編集できないので、どうしてこうなったのか不思議なのですが、問題はなくなったので解決とさせていただきます。
数日間悩んでいたのですが、なんとかなってほっとしております。
ありがとうございました。

返信

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