我已经看了几个问这个问题的其他问题,但我的情况似乎比我经历过的情况简单得多,所以我会问这个问题.
Learn.h:
#ifndef LEARN_H
#define LEARN_H
class Learn
{
public:
Learn(int x);
~Learn();
private:
const int favourite;
};
#endif
Run Code Online (Sandbox Code Playgroud)
Learn.cpp:
#include "Learn.h"
#include <iostream>
using namespace std;
Learn::Learn(int x=0): favourite(x)
{
cout << "Constructor" << endl;
}
Learn::~Learn()
{
cout << "Destructor" << endl;
}
Run Code Online (Sandbox Code Playgroud)
Source.cpp:
#include <iostream>
#include "Learn.h"
using namespace std;
int main() {
cout << "What's your favourite integer? ";
int x; cin >> x;
Learn(0);
system("PAUSE");
}
Run Code Online (Sandbox Code Playgroud)
上面的代码本身不会输出任何错误.
不过,我后,我得到更换一对夫妇的错误Learn(0)有Learn(x).他们是:
no default …好的,我已经检查了许多不同的类似问题,但似乎没有任何类似案例可以解决我的问题,或者我遗漏了一些东西。
相关方法:
private void ApplyPasswordToUser(string username, string passwordHash)
{
using(SqlConnection connection = new SqlConnection(ConnectionString))
{
SqlCommand command = new SqlCommand
{
Connection = connection,
CommandText = "dbo.AddPasswordHash @Username @PasswordHash"
};
command.Parameters.Add("@Username",SqlDbType.NVarChar,24).Value = username;
command.Parameters.AddWithValue("@PasswordHash",passwordHash);
connection.Open();
command.ExecuteNonQuery(); // Error here
}
}
Run Code Online (Sandbox Code Playgroud)
dbo.AddPasswordHash:
@Username nchar(24),
@PasswordHash nchar(80)
AS
BEGIN
SET NOCOUNT ON;
UPDATE dbo.UserPass
SET Password_Hash = @PasswordHash
WHERE Username = @Username
END
Run Code Online (Sandbox Code Playgroud)
我正在使用 CryptSharp NuGet 包中的 Blowfish 算法。
我还有 3 个其他命令,它们不将该密码哈希作为输入传递,并且一切正常。不管我怎么改,这个好像都发出来了。
哈希在其字符串中包含各种特殊字符,所以我不确定这是否会影响命令是否通过。