我正在尝试使用我通过教程找到的这个向量,该教程将代码显示为正常运行。但是,当我尝试在我的项目中使用它时,它返回错误“错误C3211:'vector :: vecarg':显式特化使用部分特化语法,使用模板<>而不是”
只是错误的部分
public XmlDocument GetPunchListXml(string communityDesc)
{
// 1. Use a new SqlConnection everywhere and do not register SqlConnection as a field on the class.
// This is a Microsoft recommended best practice. Sql Server handles connection pooling so the call new SqlConnection is very cheap.
// 2. a using block will close and dispose the connection for you
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand("GetPunchList", connection))
{
command.CommandType = CommandType.StoredProcedure;
SqlParameter parameter1 = new SqlParameter("@communityDesc", SqlDbType.VarChar);
parameter1.Value = communityDesc;
parameter1.Direction = ParameterDirection.Input;
command.Parameters.Add(parameter1);
// wrap your DataReader in a using block
using (var reader = command.ExecuteXmlReader())
{
var doc = new XmlDocument();
if (reader.Read())
{
doc.Load(reader);
}
return doc;
}
}
}
}
如果我通过更改为
来更正此错误template< class ta_a >
class vecarg
{
const ta_a& Argv;
public:
inline vecarg(const ta_a& A) : Argv(A) {}
inline const float Evaluate(const int i) const
{
return Argv.Evaluate(i);
}
};
template< class ta_a>
class vecarg< const float >
{
const ta_a& Argv;
public:
inline vecarg(const ta_a& A) : Argv(A) {}
inline const float Evaluate(const int i) const
{
return Argv;
}
};
template< class ta_a >
class vecarg< const int >
{
const ta_a& Argv;
public:
inline vecarg(const ta_a& A) : Argv(A) {}
inline const float Evaluate(const int i) const
{
return (float)Argv;
}
};
然后错误更改为“标识符'ta_a'未定义”
对解决方案的任何建议都非常感谢。
答案 0 :(得分:1)
这是错误的:
template< class ta_a>
class vecarg< const float >
这是一个错误,因为vecarg
只有一个模板参数:它可以专门用于该参数,但是没有更多的模板参数。但是此代码尝试编写两个参数ta_a
和float
。
错误消息涉及“部分特化”,因为template<class T>
引入的特化必须是部分的(它不完整,因为它仍然有参数T
)。
完整专业化的代码是:
template<> // zero parameters which have not been specialized
class vecarg< const float >
{
const float& Argv;
public:
vecarg(const float& A) : Argv(A) {}
const float Evaluate(const int i) const
{
return Argv;
}
};
我删除了多余的inline
说明符。您需要对其他专业化尝试进行类似的更改。
如果此代码的作者声称它已编译,他/她必须有一些非常古怪的编译器。