2

1 つの定義規則について、同じトークンが同じ順序である場合、複数の翻訳単位でクラスを定義できることはわかっていますが、このプログラムは私には奇妙です

ファイルmain.cpp

#include "Source.h"

struct mystructure
{
    int field1;
    float field2;
};

int main()
{

    mystructure myvar;
    myvar.field2= 2.0f;

    myCustomFunction(myvar);

    return 0;
}

ファイルSource.h

struct mystructure;

void myCustomFunction(mystructure& vv);

ファイルSource.cpp

#include "Source.h"

struct mystructure
{
    char otherfield;
    int anotherone;
    bool anotheranotherone;
};

void myCustomFunction(mystructure& vv)
{
    vv.otherfield = 'A';
}

私は MSVC2012 を使用していますが、コンパイラは文句を言いません。何故ですか?それは正常ですか?

4

2 に答える 2

3

同じコンパイル中に競合する宣言が表示されることはないため、コンパイラが文句を言うのは困難です。しかし、このコードは正しくありません。残念ながら、コンパイラはすべての間違いを拾うわけではなく、標準でもそうする必要はありません。

于 2013-05-04T16:53:17.923 に答える