Strange error message under VS2010 - function reference does not mathc function definition

Strange error message under VS2010 - function reference does not mathc function definition

arjenmarkus的头像

Hello,

I have a rather curious problem running Intel Fortran 12.1 under VS2010. My code looks essentially like this:

program xx
    implicit none

    logical, external :: modelinitialize

    logical           :: success

    success = ModelInitialize()
end program xx

When I compile the actual source under VS2010 (as part of a much larger project/solution), I get the error message:

error #7977: The type of the function reference does not match the type of the function definition.   [MODELINITIALIZE]
        success = ModelInitialize()
^

(as the routine needs to be callable from Java, it is not contained in a module)

If I compile the source outside of VS2010 with the same compile options, this problem does not occur. None of my colleagues working on the same project see this problem. Even creating a new project with just this file does not give any compil problem.

What can be the matter?

7 帖子 / 0 new
最新文章
如需更全面地了解编译器优化,请参阅优化注意事项.
mecej4的头像

The names differ as to case (upper/lower/combination). Do you have directives that affect the case of external symbols? Perhaps to make the function work with Java, which is a language that honors case?

arjenmarkus的头像

No, just the standard ones - nothing that I can think of. Besides if case sensitivity were enabled, then wouldn't the two occurrences
be seen as two entirely different routines/functions?

Anthony Richards的头像

Shouldn't you show us where ModelInitialize is defined so we can see what the compiler is expecting its interface to be?

arjenmarkus的头像

Well, that is in the top part of the file:

logical, external :: ModelInitialize

It is a more modern version of the FORTRAN 77 way of dealing with external functions (modern, because of the combination
into one statement)

Steve Lionel (Intel)的头像

In Visual Studio you get generated interface checking. The compiler is then noticing that the actual function is declared as returning a type other than LOGICAL. You need to show us the called routine.

Steve
arjenmarkus的头像

Steve,

you are absolutely right! The source file containing the function ModelInitialize defines it as an integer function (because of the Java
connection). Stupid blind spot - I had all but forgotten these automatically generated interfaces.

Well, easy to fix.

Thanks very much,

Arjen

登陆并发表评论。