admin管理员组

文章数量:1201993

I wanted to try to use the code of the Physically Based Rendering Toolkit (PBRT). So I cloned the repo, built the project and then tried to do a "hello world"

#include <iostream>
#include <pbrt/pbrt.h>
#include <pbrt/util/transform.h>

using namespace pbrt;
int main() {
     Point3f p(1, 2, 3);
     Float mat[4][4] = {
         {1.0, 0.0, 0.0, 0.0},
         {0.0, 1.0, 0.0, 0.0},
         {0.0, 0.0, 1.0, 0.0},
         {0.0, 0.0, 0.0, 1.0}
     };
     Transform T(mat);
     Point3f pNew = T(p);
     return 0;
    }

However, when compiling I get the error

Severity    Code    Description Project File    Line    Suppression State   Details
Error   C2440   'return': cannot convert from 'initializer list' to 'pbrt::Quaternion'  cppplayground   C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\vecmath.h   840     

what have I done wrong?

edit

This is the full build output when I do the compilation:

Build started at 3:54 PM...
1>------ Build started: Project: cppplayground, Configuration: Debug x64 ------
1>Build started 1/21/2025 3:54:32 PM.
1>Target PrepareForBuild:
1>  Structured output is enabled. The formatting of compiler diagnostics will reflect the error hierarchy. See  for more details.
1>Target InitializeBuildStatus:
1>  Touching "cppplayground\x64\Debug\cppplayground.tlog\unsuccessfulbuild".
1>Target ClCompile:
1>  cppplayground.cpp
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\float.h(43,39): warning C4244: 'initializing': conversion from 'double' to 'const pbrt::Float', possible loss of data
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\math.h(44,20): warning C4305: 'initializing': truncation from 'double' to 'const pbrt::Float'
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\math.h(45,23): warning C4305: 'initializing': truncation from 'double' to 'const pbrt::Float'
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\math.h(46,24): warning C4305: 'initializing': truncation from 'double' to 'const pbrt::Float'
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\math.h(47,24): warning C4305: 'initializing': truncation from 'double' to 'const pbrt::Float'
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\math.h(48,25): warning C4305: 'initializing': truncation from 'double' to 'const pbrt::Float'
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\math.h(49,25): warning C4305: 'initializing': truncation from 'double' to 'const pbrt::Float'
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\math.h(50,23): warning C4305: 'initializing': truncation from 'double' to 'const pbrt::Float'
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\math.h(118,24): warning C4244: 'argument': conversion from 'float' to 'uint32_t', possible loss of data
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\math.h(118,47): warning C4244: 'argument': conversion from 'float' to 'uint32_t', possible loss of data
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\math.h(118,69): warning C4244: 'argument': conversion from 'float' to 'uint32_t', possible loss of data
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\math.h(137,12): warning C4244: 'return': conversion from 'uint64_t' to 'uint32_t', possible loss of data
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\math.h(270,19): warning C4244: 'return': conversion from 'int' to 'pbrt::Float', possible loss of data
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\math.h(368,27): warning C4305: 'initializing': truncation from 'double' to 'pbrt::Float'
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\math.h(410,17): error C3861: '__builtin_clz': identifier not found
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\math.h(435,17): error C3861: '__builtin_clzll': identifier not found
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\vecmath.h(840,55): error C2440: 'return': cannot convert from 'initializer list' to 'pbrt::Quaternion'
1>  (compiling source file 'cppplayground.cpp')
1>      C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\vecmath.h(840,48):
1>      'pbrt::Quaternion::Quaternion': function does not take 2 arguments
1>          C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\vecmath.h(840,48):
1>          while trying to match the argument list '(pbrt::Vector3<pbrt::Float>, pbrt::Float)'
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\vecmath.h(848,43): error C2440: 'return': cannot convert from 'initializer list' to 'pbrt::Quaternion'
1>  (compiling source file 'cppplayground.cpp')
1>      C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\vecmath.h(848,36):
1>      'pbrt::Quaternion::Quaternion': function does not take 2 arguments
1>          C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\vecmath.h(848,36):
1>          while trying to match the argument list '(pbrt::Vector3<pbrt::Float>, pbrt::Float)'
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\vecmath.h(850,55): error C2440: 'return': cannot convert from 'initializer list' to 'pbrt::Quaternion'
1>  (compiling source file 'cppplayground.cpp')
1>      C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\vecmath.h(850,48):
1>      'pbrt::Quaternion::Quaternion': function does not take 2 arguments
1>          C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\vecmath.h(850,48):
1>          while trying to match the argument list '(pbrt::Vector3<pbrt::Float>, pbrt::Float)'
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\vecmath.h(858,50): error C2440: 'return': cannot convert from 'initializer list' to 'pbrt::Quaternion'
1>  (compiling source file 'cppplayground.cpp')
1>      C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\vecmath.h(858,43):
1>      'pbrt::Quaternion::Quaternion': function does not take 2 arguments
1>          C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\vecmath.h(858,43):
1>          while trying to match the argument list '(pbrt::Vector3<pbrt::Float>, pbrt::Float)'
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\vecmath.h(869,16): error C2440: 'return': cannot convert from 'initializer list' to 'pbrt::Quaternion'
1>  (compiling source file 'cppplayground.cpp')
1>      C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\vecmath.h(869,9):
1>      'pbrt::Quaternion::Quaternion': function does not take 2 arguments
1>          C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\vecmath.h(869,9):
1>          while trying to match the argument list '(pbrt::Vector3<pbrt::Float>, pbrt::Float)'
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\vecmath.h(1777,27): warning C4244: 'return': conversion from 'float' to 'uint16_t', possible loss of data
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\color.h(359,22): warning C4244: 'return': conversion from 'int' to 'pbrt::Float', possible loss of data
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\color.h(517,17): warning C4244: 'return': conversion from 'T' to 'uint8_t', possible loss of data
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\color.h(517,17): warning C4244:         with
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\color.h(517,17): warning C4244:         [
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\color.h(517,17): warning C4244:             T=pbrt::Float
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\color.h(517,17): warning C4244:         ]
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\color.h(543,35): warning C4305: 'argument': truncation from 'double' to 'pbrt::Float'
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\color.h(546,35): warning C4305: 'argument': truncation from 'double' to 'pbrt::Float'
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\lowdiscrepancy.h(46,76): warning C4244: 'argument': conversion from 'uint64_t' to 'uint32_t', possible loss of data
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\lowdiscrepancy.h(127,24): warning C4244: 'initializing': conversion from 'uint64_t' to 'int', possible loss of data
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\lowdiscrepancy.h(148,24): warning C4244: 'initializing': conversion from 'uint64_t' to 'int', possible loss of data
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\lowdiscrepancy.h(149,28): warning C4244: 'initializing': conversion from 'uint64_t' to 'uint32_t', possible loss of data
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\memory.h(108,29): warning C4267: '+=': conversion from 'size_t' to 'int', possible loss of data
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\memory.h(112,19): warning C4267: '+=': conversion from 'size_t' to 'int', possible loss of data
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\memory.h(143,29): warning C4267: '=': conversion from 'size_t' to 'int', possible loss of data
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(659,15): warning C4267: 'initializing': conversion from 'size_t' to 'int', possible loss of data
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(789,20): warning C4244: 'initializing': conversion from 'T' to 'int', possible loss of data
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(789,20): warning C4244:         with
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(789,20): warning C4244:         [
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(789,20): warning C4244:             T=pbrt::Float
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(789,20): warning C4244:         ]
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(856,34): warning C4244: 'argument': conversion from 'double' to 'const _Ty', possible loss of data
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(856,34): warning C4244:         with
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(856,34): warning C4244:         [
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(856,34): warning C4244:             _Ty=pbrt::Float
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(856,34): warning C4244:         ]
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(887,19): warning C4244: 'return': conversion from 'const T' to 'pbrt::Float', possible loss of data
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(887,19): warning C4244:         with
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(887,19): warning C4244:         [
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(887,19): warning C4244:             T=double
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(887,19): warning C4244:         ]
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(975,39): warning C4244: 'argument': conversion from 'T' to 'const _Ty', possible loss of data
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(975,39): warning C4244:         with
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(975,39): warning C4244:         [
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(975,39): warning C4244:             T=pbrt::Float
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(975,39): warning C4244:         ]
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(975,39): warning C4244:         and
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(975,39): warning C4244:         [
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(975,39): warning C4244:             _Ty=int
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(975,39): warning C4244:         ]
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(976,39): warning C4244: 'argument': conversion from 'T' to 'const _Ty', possible loss of data
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(976,39): warning C4244:         with
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(976,39): warning C4244:         [
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(976,39): warning C4244:             T=pbrt::Float
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(976,39): warning C4244:         ]
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(976,39): warning C4244:         and
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(976,39): warning C4244:         [
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(976,39): warning C4244:             _Ty=int
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\sampling.h(976,39): warning C4244:         ]
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\spectrum.h(38,39): warning C4305: 'initializing': truncation from 'double' to 'const pbrt::Float'
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\spectrum.h(380,49): warning C4244: 'argument': conversion from 'const pbrt::Float' to 'int', possible loss of data
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\spectrum.h(380,37): warning C4244: 'argument': conversion from 'const pbrt::Float' to 'int', possible loss of data
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\spectrum.h(418,52): warning C4244: 'argument': conversion from 'int' to 'pbrt::Float', possible loss of data
1>  (compiling source file 'cppplayground.cpp')
1>  C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\spectrum.h(634,22): warning C4244: '=': conversion from 'double' to 'pbrt::Float', possible loss of data
1>  (compiling source file 'cppplayground.cpp')
1>Done building target "ClCompile" in project "cppplayground.vcxproj" -- FAILED.
1>
1>Done building project "cppplayground.vcxproj" -- FAILED.
1>
1>Build FAILED.
1>
1>C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\float.h(43,39): warning C4244: 'initializing': conversion from 'double' to 'const pbrt::Float', possible loss of data
1>C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\math.h(44,20): warning C4305: 'initializing': truncation from 'double' to 'const pbrt::Float'
1>C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\math.h(45,23): warning C4305: 'initializing': truncation from 'double' to 'const pbrt::Float'
1>C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\math.h(46,24): warning C4305: 'initializing': truncation from 'double' to 'const pbrt::Float'
1>C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\math.h(47,24): warning C4305: 'initializing': truncation from 'double' to 'const pbrt::Float'
1>C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\math.h(48,25): warning C4305: 'initializing': truncation from 'double' to 'const pbrt::Float'
1>C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\math.h(49,25): warning C4305: 'initializing': truncation from 'double' to 'const pbrt::Float'
1>C:\Users\usr\source\repos\pbrt-v4\src\pbrt\util\math.h(50,23): warning C4305: 'initializing': truncation from 'double' to 'const pbrt::Float'

I hope this helps for debugging further

本文标签: cPBRT39s hello worldStack Overflow