Visual Studio の 2019 とか 2022 あたりを使うと,C++のビルドがうまく行かないことが多い様子です.
{いつ,どんなコードで,何をした時}という具体例を示すことができないため,曖昧な話になってしまいますが……
(曖昧すぎて「意見交換」にすべきか迷いましたが,一応,解決したい事柄が存在する話なので「Q&A」側とします)
本来ならば,状況が再現する最小の例のようなものを示すべきなのですが,現状,用意できません.
症状
C++ のプログラムを「ビルド」した際に以下のような症状が起きることがあります.
ある程度の規模がある状況で class のメンバ変数の型を変えた場合等に発生することが多いような気がします.
(1) コンパイルエラーになる :
どう考えても問題が無いコードのコンパイルが通りません.
- 例えば,ある
class C
の定義がC.h
に書かれているとして,このC
のメンバ変数の型をm1
からm2
に変えたとき,ビルドすると「m1
型って何ですか?」という旨のエラーが出たりします.
m1
型が見なくなるのは,そのようにコードを変更(例えば,不要になった#include "m1.h"
の除去)しているから当然ですが,もはやそこにm1
型を使うコードは無いのに執拗に「変更前にm1
型のメンバが書かれていたあたりの行番号」に対してそういうエラーが出てくるのは意味がわかりません.
(2) ビルドは通るが,動かしてみるとどこかの時点(終了時など)に例外(?)が出る
意味不明な挙動です.例えば終了時にどこぞのデストラクタの奥深く(?)で問題が起きたみたいなことを言われるが,そんなことが起こるようなコードを書いてない.
とにかく突然変なことが起きるので「ビルド」の結果を信頼できません.
また,これらの症状は 「リビルド」すれば起きない(:改善される/想定通りにビルドできる) のです.
例えば上記の(2)が発生したとき,全くコードを変更せずに「リビルド」すれば変な例外(?)は起こらなくなります.
しかし毎回リビルドするのでは非常に時間がかかるので厄介です.
想像とか
「インクリメンタルビルド」とか呼ぶのでしょうか?
要は,コード修正の影響範囲のみをコンパイルし直してビルドするようなことが行われるハズですが,この「影響範囲」の決定が上手くいっていないのではないかと想像します. 症状の雰囲気的に.
(型の宣言だけで済ませているような部分があると,「影響範囲」から漏れる? みたいな?)
知りたいこと
{何故こんなことになるのか,どうすれば 改善/回避 できるのか}等.
「ひょっとしてお前……こんなバカみたいなことしてたりしないだろうな?」みたいな話とか無いですかね?
その他
- 私は Visual Studio を C++ と C# で使っていますが,C#ではこのような問題を経験していません.
- Visual Studio での C++ はそこそこ長いことやってきた感じなのですが, VS2017 以前を使っていたときにはこのようなことを経験しませんでした.(「VS2017 と VS2022 で同じプログラムをビルドした場合…」みたいな比較があるわけではないので何かを推論する根拠にはならないですが…)
- {VS2019が入っているPC,VS2022が入っている別のPC}という2つの環境で同じように問題を経験しているので,「単に Visual Studio の何かがぶっ壊れた(再インストールすべき状態)」とかではなくて,何か別の原因というのがあるのではないか? とか想像していますが……
- (これは記憶が曖昧ですが)デバッグビルド/リリースビルド に依らず起きる.
[追記] これは上記の現象と関係あるのか無いのかわかりませんが……
ビルドが通っても「エラー」ウィンドウに謎のエラー表示(Warningではなくてエラー側の表示)がずっと残り続ける場合が何度かありました.
(:謎のコンパイルエラーを表示してくるのに,ビルドは「成功」したと言われる謎の状況)
これが起きた際には「ソリューションの再スキャン」というのを実行することでとりあえず状況改善することができた様子でした.
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2025/01/16 04:56