使用 class 方法的 C++ 未解析外部
C++ Unresolved External with class method
我正在尝试创建一个函数,它根据参数随机生成一定数量的 Circle 对象。
我已经实现了该功能,但出现未解决的外部符号错误。
我不能在 class 方法中生成对象吗?我想,教授希望我们用 class 方法来实现它。
错误:
严重性代码描述项目文件行抑制状态
错误LNK2019 未解析的外部符号“public: static class std::vector > __cdecl Circle::generateCircles(int)" (?generateCircles@Circle@@SA?AV?$vector@PAVCircle@@V?$allocator@PAVCircle@@@std@@@std@@H @Z) 在函数_main naloga0301 C:\Users\aleks\source\repos\naloga0301\main.obj 1
中引用
Circle.h:
#pragma once
#include <iostream>
#include <vector>
#include <string>
class Circle {
private:
double radius;
static double counter;
public:
double getRadius() const;
void setRadius(double newRadius);
Circle();
Circle(double r);
Circle(const Circle& circ1) { radius = circ1.radius; counter = circ1.counter; Circle::counter++; }
static std::vector<Circle*> generateCircles(int numberOfCircles);
~Circle();
std::string toString() const;
static void printCounter();
double diameter() const;
double area() const;
};
Circle.cpp:
#include <iostream>
#include <vector>
#include <string>
#include "Circle.h"
#include "Math.h"
double Circle::counter = 0;
double Circle::getRadius() const
{
return radius;
}
void Circle::setRadius(double newRadius)
{
this->radius = newRadius;
}
Circle::Circle(double r) : radius(r) {
//increments counter every time a constructor for Circle is called
Circle::counter++;
}
Circle::~Circle() {
//when a destructor is called, decrement the counter
Circle::counter--;
}
std::string Circle::toString() const
{
//adds up the data to one string which is returned
std::string data;
double r = getRadius();
data = "Radius: " + std::to_string(r) + "cm, diameter: " + std::to_string(diameter()) + "cm2, area: " + std::to_string(area()) + "cm3";
return data;
}
void Circle::printCounter()
{
std::cout << counter << std::endl;
}
double Circle::diameter() const
{
double diam = 2 * Math::pi * getRadius();
return diam;
}
double Circle::area() const
{
return Math::pi * Math::square(getRadius());
}
std::vector<Circle*> generateCircles(int numberOfCircles) {
//uses dynamic memory allocation to generate a desired number of Circle instances
std::vector<Circle*> circles(numberOfCircles);
for (int i = 0; i < numberOfCircles; i++) {
circles[i] = new Circle(rand());
}
return circles;
}
main.cpp:
#include <iostream>
#include <string>
#include <vector>
#include <random>
#include <time.h>
#include "Math.h"
#include "Circle.h"
void printCircles(std::vector<Circle*> circles);
int main()
{
srand(time(NULL));
Circle::printCounter();
std::vector<Circle*> circlez = Circle::generateCircles(10);
Circle::printCounter();
printCircles(circlez);
Circle c1(10.5);
Circle c2(6.0);
std::cout << "Circle with " << Math::max(c1, c2).toString() << " has a bigger diameter." << std::endl;
Circle::printCounter();
return 0;
}
void printCircles(std::vector<Circle*> circles) {
//iterates over the vector and uses toString() on each instance of Circle
for (int i = 0; i < circles.size(); i++) {
std::cout << circles[i]->toString() << std::endl;
}
}
您的代码缺少方法前面的 Circle::
说明符,这意味着您声明的是函数而不是方法:
std::vector<Circle*> generateCircles(int numberOfCircles) {
//uses dynamic memory allocation to generate a desired number of Circle instances
std::vector<Circle*> circles(numberOfCircles);
for (int i = 0; i < numberOfCircles; i++) {
circles[i] = new Circle(rand());
}
return circles;
}
应该是:
std::vector<Circle*> Circle::generateCircles(int numberOfCircles) {
//uses dynamic memory allocation to generate a desired number of Circle instances
std::vector<Circle*> circles(numberOfCircles);
for(int i = 0; i < numberOfCircles; i++) {
circles[i] = new Circle(rand());
}
return circles;
}
看看你其他的方法对不对!
我正在尝试创建一个函数,它根据参数随机生成一定数量的 Circle 对象。
我已经实现了该功能,但出现未解决的外部符号错误。
我不能在 class 方法中生成对象吗?我想,教授希望我们用 class 方法来实现它。
错误:
严重性代码描述项目文件行抑制状态
错误LNK2019 未解析的外部符号“public: static class std::vector
Circle.h:
#pragma once
#include <iostream>
#include <vector>
#include <string>
class Circle {
private:
double radius;
static double counter;
public:
double getRadius() const;
void setRadius(double newRadius);
Circle();
Circle(double r);
Circle(const Circle& circ1) { radius = circ1.radius; counter = circ1.counter; Circle::counter++; }
static std::vector<Circle*> generateCircles(int numberOfCircles);
~Circle();
std::string toString() const;
static void printCounter();
double diameter() const;
double area() const;
};
Circle.cpp:
#include <iostream>
#include <vector>
#include <string>
#include "Circle.h"
#include "Math.h"
double Circle::counter = 0;
double Circle::getRadius() const
{
return radius;
}
void Circle::setRadius(double newRadius)
{
this->radius = newRadius;
}
Circle::Circle(double r) : radius(r) {
//increments counter every time a constructor for Circle is called
Circle::counter++;
}
Circle::~Circle() {
//when a destructor is called, decrement the counter
Circle::counter--;
}
std::string Circle::toString() const
{
//adds up the data to one string which is returned
std::string data;
double r = getRadius();
data = "Radius: " + std::to_string(r) + "cm, diameter: " + std::to_string(diameter()) + "cm2, area: " + std::to_string(area()) + "cm3";
return data;
}
void Circle::printCounter()
{
std::cout << counter << std::endl;
}
double Circle::diameter() const
{
double diam = 2 * Math::pi * getRadius();
return diam;
}
double Circle::area() const
{
return Math::pi * Math::square(getRadius());
}
std::vector<Circle*> generateCircles(int numberOfCircles) {
//uses dynamic memory allocation to generate a desired number of Circle instances
std::vector<Circle*> circles(numberOfCircles);
for (int i = 0; i < numberOfCircles; i++) {
circles[i] = new Circle(rand());
}
return circles;
}
main.cpp:
#include <iostream>
#include <string>
#include <vector>
#include <random>
#include <time.h>
#include "Math.h"
#include "Circle.h"
void printCircles(std::vector<Circle*> circles);
int main()
{
srand(time(NULL));
Circle::printCounter();
std::vector<Circle*> circlez = Circle::generateCircles(10);
Circle::printCounter();
printCircles(circlez);
Circle c1(10.5);
Circle c2(6.0);
std::cout << "Circle with " << Math::max(c1, c2).toString() << " has a bigger diameter." << std::endl;
Circle::printCounter();
return 0;
}
void printCircles(std::vector<Circle*> circles) {
//iterates over the vector and uses toString() on each instance of Circle
for (int i = 0; i < circles.size(); i++) {
std::cout << circles[i]->toString() << std::endl;
}
}
您的代码缺少方法前面的 Circle::
说明符,这意味着您声明的是函数而不是方法:
std::vector<Circle*> generateCircles(int numberOfCircles) {
//uses dynamic memory allocation to generate a desired number of Circle instances
std::vector<Circle*> circles(numberOfCircles);
for (int i = 0; i < numberOfCircles; i++) {
circles[i] = new Circle(rand());
}
return circles;
}
应该是:
std::vector<Circle*> Circle::generateCircles(int numberOfCircles) {
//uses dynamic memory allocation to generate a desired number of Circle instances
std::vector<Circle*> circles(numberOfCircles);
for(int i = 0; i < numberOfCircles; i++) {
circles[i] = new Circle(rand());
}
return circles;
}
看看你其他的方法对不对!