Ссылка NullReferenceException или Object, не установленная на экземпляр объекта, возникает, когда объект класса, который вы пытаетесь использовать, не создается. Например:
Предположим, что у вас есть класс с именем Student.
public class Student
{
private string FirstName;
private string LastName;
public string GetFullName()
{
return FirstName + LastName;
}
}
Теперь рассмотрим другой класс, в котором вы пытаетесь получить полное имя учащегося.
public class StudentInfo
{
public string GetStudentName()
{
Student s;
string fullname = s.GetFullName();
return fullname;
}
}
Как видно из вышеприведенного кода, оператор Student s - объявляет только переменную типа Student, обратите внимание, что класс Student не создается в этой точке. Следовательно, когда выполняется выполнение инструкции s.GetFullName (), она выкинет исключение NullReferenceException.
Проверьте QDir для этого:
QString path = QDir(dirPath).filePath(fileName);
Как и в ответе @ user405725 (но не используя boost), и упомянутом в комментарии @ildjarn, эта функция доступна как часть std :: experimental :: filesystem . Следующий код компилируется с использованием Microsoft Visual Studio 2015 Community Edition:
#include <iostream>
#include <filesystem>
namespace fs = std::experimental::filesystem;
int main()
{
fs::path dir ("/tmp");
fs::path file ("foo.txt");
fs::path full_path = dir / file;
std::cout << full_path << std::endl;
return 0;
}
С C ++ 11 и Qt вы можете это сделать:
QString join(const QString& v) {
return v;
}
template<typename... Args>
QString join(const QString& first, Args... args) {
return QDir(first).filePath(join(args...));
}
Использование:
QString path = join("/tmp", "dir", "file"); // /tmp/dir/file
Если вы хотите сделать это с помощью Qt, вы можете использовать конструктор QFileInfo
:
QFileInfo fi( QDir("/tmp"), "file" );
QString path = fi.absoluteFilePath();