gpt4 book ai didi

c++ - 定义函数后 main 出错? "undefined reference to ' 序列::序列()'"

转载 作者:行者123 更新时间:2023-11-28 06:02:54 29 4
gpt4 key购买 nike

我的代码在 main(序列测试;)的第一行出现错误,指出它是对 sequence::sequence() 的 undefined reference 。我无法更改 main 中的代码。有谁知道我该如何解决这个错误?

#include <cctype>       // Provides toupper
#include <iostream> // Provides cout and cin
#include <cstdlib> // Provides EXIT_SUCCESS

using namespace std;

class sequence
{
public:
// TYPEDEFS and MEMBER CONSTANTS
typedef double value_type;
typedef std::size_t size_type;
static const size_type CAPACITY = 30;
// CONSTRUCTOR
sequence( );
// MODIFICATION MEMBER FUNCTIONS
void start( );
void advance( );
void insert(const value_type& entry);
void attach(const value_type& entry);
void remove_current( );
// CONSTANT MEMBER FUNCTIONS
size_type size( ) const;
bool is_item( ) const;
value_type current( ) const;
private:
value_type data[CAPACITY];
size_type used;
size_type current_index;
};


// PROTOTYPES for functions used by this test program:
void print_menu( );
// Postcondition: A menu of choices for this program has been written to cout.

char get_user_command( );
// Postcondition: The user has been prompted to enter a one character command.
// The next character has been read (skipping blanks and newline characters),
// and this character has been returned.

void show_sequence(sequence display);
// Postcondition: The items on display have been printed to cout (one per line).

double get_number( );
// Postcondition: The user has been prompted to enter a real number. The
// number has been read, echoed to the screen, and returned by the function.

sequence::size_type sequence::size( ) const
{
return (used);
}

bool sequence::is_item( ) const
{
if (used == 0)
{
cout << "You have reached the end of the sequence" << endl;
return (1);
}

else
return (0);
}

sequence::value_type sequence::current( ) const
{
if (is_item() == 0)
{
return (current_index);
}
return (0);
}


void sequence::start( )
{
current_index = data[0];

return;
}

void sequence::advance( )
{
unsigned int i;

while (is_item() == 0)
{
for (i = 1, current_index = data[0]; used >= i ; i++ )
{
current_index = data[i];
}
}
return;
}

void sequence::insert(const value_type& entry)
{
unsigned int i;
while (size( ) < CAPACITY)
{
for (i = 1, data[i] = current_index; used>= i ; i++)
{
data[i] = data[i+1];
}
current_index = entry;
}
return;
}

void sequence::attach(const value_type& entry)
{
unsigned int i;
while (size( ) < CAPACITY)
{
for (i = 1, data[i] = current_index + 1; used>= i ; i++)
{
data[i] = data[i+1];
}
current_index = entry;
}
return;
}

void sequence::remove_current( )
{
unsigned int i;
while (is_item() == 0)
{ int temp;
temp = current_index + 1;
--current_index;
current_index = temp;
for (i = 1, data[i] = current_index; used>= i ; i++)
{
data[i] = data[i-1];
}
}
return;
}


int main( )
{
sequence test; // A sequence that we’ll perform tests on
char choice; // A command character entered by the user

cout << "I have initialized an empty sequence of real numbers." << endl;

do
{
print_menu( );
choice = toupper(get_user_command( ));
switch (choice)
{
case '!': test.start( );
break;
case '+': test.advance( );
break;
case '?': if (test.is_item( ))
cout << "There is an item." << endl;
else
cout << "There is no current item." << endl;
break;
case 'C': if (test.is_item( ))
cout << "Current item is: " << test.current( ) << endl;
else
cout << "There is no current item." << endl;
break;
case 'P': show_sequence(test);
break;
case 'S': cout << "Size is " << test.size( ) << '.' << endl;
break;
case 'I': test.insert(get_number( ));
break;
case 'A': test.attach(get_number( ));
break;
case 'R': test.remove_current( );
cout << "The current item has been removed." << endl;
break;
case 'Q': cout << "Ridicule is the best test of truth." << endl;
break;
default: cout << choice << " is invalid." << endl;
}
}
while ((choice != 'Q'));

return EXIT_SUCCESS;
}

void print_menu( )
// Library facilities used: iostream.h
{
cout << endl; // Print blank line before the menu
cout << "The following choices are available: " << endl;
cout << " ! Activate the start( ) function" << endl;
cout << " + Activate the advance( ) function" << endl;
cout << " ? Print the result from the is_item( ) function" << endl;
cout << " C Print the result from the current( ) function" << endl;
cout << " P Print a copy of the entire sequence" << endl;
cout << " S Print the result from the size( ) function" << endl;
cout << " I Insert a new number with the insert(...) function" << endl;
cout << " A Attach a new number with the attach(...) function" << endl;
cout << " R Activate the remove_current( ) function" << endl;
cout << " Q Quit this test program" << endl;
}

char get_user_command( )
// Library facilities used: iostream
{
char command;

cout << "Enter choice: ";
cin >> command; // Input of characters skips blanks and newline character

return command;
}

void show_sequence(sequence display)
// Library facilities used: iostream
{
for (display.start( ); display.is_item( ); display.advance( ))
cout << display.current( ) << endl;
}

double get_number( )
// Library facilities used: iostream
{
double result;

cout << "Please enter a real number for the sequence: ";
cin >> result;
cout << result << " has been read." << endl;
return result;
}

最佳答案

问题是您声明 sequence 的默认构造函数:

class sequence
{
...
// CONSTRUCTOR
sequence( );

但还没有定义它。要定义它,您需要编写如下代码:

sequence::sequence( )
{
...
}

或者,您可以删除声明,让编译器自动为您生成默认构造函数。 (只要您没有其他构造函数,并且编译器提供的默认行为适合您的目的,这就有效。)

关于c++ - 定义函数后 main 出错? "undefined reference to ' 序列::序列()'",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32930250/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com