- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
depending on a template parameter"?-6ren"> depending on a template parameter"?-我正在将我的遗留 VC++ 项目转换为与 Android NDK 兼容,但我遇到了一个奇怪的错误。消息说: [armeabi] Compile++ thumb: procalc-core std::-6ren">
我正在将我的遗留 VC++ 项目转换为与 Android NDK 兼容,但我遇到了一个奇怪的错误。消息说:
[armeabi] Compile++ thumb: procalc-core <= pcc_arithmetics.cpp
In file included from D:/Dokumenty/Dev/Android/ProCalc//jni/pcc_arithmetics.h:10:0,
from D:/Dokumenty/Dev/Android/ProCalc//jni/pcc_arithmetics.cpp:1:
D:/Dokumenty/Dev/Android/ProCalc//jni/pcc_common.h: In static member function
'static std::string ProCalcCore::CommonTools::ToStringBase(T, int)':
D:/Dokumenty/Dev/Android/ProCalc//jni/pcc_common.h:102:68: error: there are no
arguments to 'ConvertException' that depend on a template parameter, so a
declaration of 'ConvertException' must be available [-fpermissive]
throw ConvertException(PROCALC_ERROR_SYNTAX_INVALID_INTEGER_BASE);
^
D:/Dokumenty/Dev/Android/ProCalc//jni/pcc_common.h:102:68: note: (if you use
'-fpermissive', G++ will accept your code, but allowing the use of an undeclared
name is deprecated)
make.exe: *** [D:/Dokumenty/Dev/Android/ProCalc//obj/local/armeabi/objs/procalc-
core/pcc_arithmetics.o] Error 1
错误在以下地方抛出:
template <typename T>
std::string CommonTools::ToStringBase(T val, int base)
{
if (base < 2)
throw ConvertException(PROCALC_ERROR_SYNTAX_INVALID_INTEGER_BASE);
大写命名的错误值是一个#define
d int 值。
ConvertException
在另一个文件中声明:
namespace ProCalcCore
{
(...)
class ConvertException : public InternalException
{
public:
ConvertException(const unsigned long int & newErrorCode);
};
当我尝试将 ConvertException
更改为 ProCalcCore::ConvertException
时,出现另一个错误:
D:/Dokumenty/Dev/Android/ProCalc//jni/pcc_common.h:102:10: error: 'ConvertException'
is not a member of 'ProCalcCore'
所有依赖项都已正确解析 - 在 VS 中项目编译没有问题。
我该如何解决?是什么导致了这个错误?
最佳答案
“在 visual studio 中项目编译没有问题”是你的依赖关系正确的微弱证据。
问题是 ConvertException
在声明 template
的地方不可见。某些版本的 Visual Studio 仅尝试在实例化 template
时绑定(bind)此类“自由”类型和表达式,这在 C++ 标准下是不正确的。
因此您的编译器指出它无法计算出 ConvertException
指的是什么类型。为了让它知道它指的是什么类型,您需要前向声明它(这可能有其自身的问题),或者在使用它之前 #include
头文件。
如果您认为您已经在 #include
了,通常您的问题是包含 ConvertException
的头文件以 #include
结束正在调用 CommonTools::ToStringBase
。头文件保护(或 #pragma once
)然后消除无限循环。
烦人的是,如何消除无限循环取决于你先包含哪个头文件!如果包含 ConvertException
头文件,则它会包含 ToStringBase
,后者包含 ConvertException
。第二个 #include "ConvertException.h"
被头文件 #define
守卫消除了。
如果您改为首先包含 ToStringBase
,它将包含 ConvertException
,然后包含 ToStringBase
,后者被 header 保护消除。
因此,无论首先包含什么头文件,其次都会被解析。
关于android - 如何解决 "There are no arguments to <name> depending on a template parameter"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20202157/
我是一名优秀的程序员,十分优秀!